1//
2// cpp/gen/emdi12_gen.cpp
3// Generated by AMC
4//
5// Copyright (C) 2008-2013 AlgoEngineering LLC
6// Copyright (C) 2013-2019 NYSE | Intercontinental Exchange
7// Copyright (C) 2020-2023 Astra
8// Copyright (C) 2023 AlgoRND
9//
10// This source code constitutes confidential information and trade secrets
11// of AlgoRND. Unauthorized copying, distribution or sharing of this file,
12// via any medium, is strictly prohibited.
13//
14
15
16#include "include/algo.h" // hard-coded include
17#include "include/gen/emdi12_gen.h"
18#include "include/gen/emdi12_gen.inl.h"
19#include "include/gen/algo_gen.h"
20#include "include/gen/algo_gen.inl.h"
21//#pragma endinclude
22namespace emdi12 { // gen:ns_print_proto
23 // func:emdi12.InstrmtLegGrp.LegSymbol.ReadStrptrMaybe
24 static bool LegSymbol_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
25 // func:emdi12.InstrmtLegGrp.LegSecurityID.ReadStrptrMaybe
26 static bool LegSecurityID_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
27 // func:emdi12.InstrmtLegGrp.LegSecurityType.ReadStrptrMaybe
28 static bool LegSecurityType_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
29 // func:emdi12.InstrmtLegGrp.LegRatioQty.ReadStrptrMaybe
30 static bool LegRatioQty_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
31 // func:emdi12.InstrmtLegGrp.LegSide.ReadStrptrMaybe
32 static bool LegSide_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
33 // func:emdi12.InstrmtLegGrp.LegPrice.ReadStrptrMaybe
34 static bool LegPrice_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) __attribute__((nothrow));
35 // func:emdi12.ComplexInstrumentUpdate.MsgSeqNum.ReadStrptrMaybe
36 static bool MsgSeqNum_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
37 // func:emdi12.ComplexInstrumentUpdate.SenderCompID.ReadStrptrMaybe
38 static bool SenderCompID_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
39 // func:emdi12.ComplexInstrumentUpdate.SecurityID.ReadStrptrMaybe
40 static bool SecurityID_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
41 // func:emdi12.ComplexInstrumentUpdate.SecurityDesc.ReadStrptrMaybe
42 static bool SecurityDesc_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
43 // func:emdi12.ComplexInstrumentUpdate.SecuritySubType.ReadStrptrMaybe
44 static bool SecuritySubType_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
45 // func:emdi12.ComplexInstrumentUpdate.ProductComplex.ReadStrptrMaybe
46 static bool ProductComplex_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
47 // func:emdi12.ComplexInstrumentUpdate.LegRatioMultiplier.ReadStrptrMaybe
48 static bool LegRatioMultiplier_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
49 // func:emdi12.ComplexInstrumentUpdate.QuantityScalingFactor.ReadStrptrMaybe
50 static bool QuantityScalingFactor_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
51 // func:emdi12.ComplexInstrumentUpdate.LastFragment.ReadStrptrMaybe
52 static bool LastFragment_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
53 // func:emdi12.ComplexInstrumentUpdate.MarketSegmentGrp1.ReadStrptrMaybe
54 static bool MarketSegmentGrp1_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
55 // func:emdi12.ComplexInstrumentUpdate.TransactTime.ReadStrptrMaybe
56 static bool TransactTime_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
57 // func:emdi12.CrossRequestSideGrp.Side.ReadStrptrMaybe
58 static bool Side_ReadStrptrMaybe(emdi12::CrossRequestSideGrp &parent, algo::strptr in_str) __attribute__((nothrow));
59 // func:emdi12.CrossRequest.MsgSeqNum.ReadStrptrMaybe
60 static bool MsgSeqNum_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
61 // func:emdi12.CrossRequest.SenderCompID.ReadStrptrMaybe
62 static bool SenderCompID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
63 // func:emdi12.CrossRequest.MarketSegmentID.ReadStrptrMaybe
64 static bool MarketSegmentID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
65 // func:emdi12.CrossRequest.SecurityID.ReadStrptrMaybe
66 static bool SecurityID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
67 // func:emdi12.CrossRequest.OrderQty.ReadStrptrMaybe
68 static bool OrderQty_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
69 // func:emdi12.CrossRequest.CrossRequestType.ReadStrptrMaybe
70 static bool CrossRequestType_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
71 // func:emdi12.CrossRequest.CrossRequestSideGrp.ReadStrptrMaybe
72 static bool CrossRequestSideGrp_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
73 // func:emdi12.CrossRequest.MDEntryPx.ReadStrptrMaybe
74 static bool MDEntryPx_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
75 // func:emdi12.CrossRequest.TransactTime.ReadStrptrMaybe
76 static bool TransactTime_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) __attribute__((nothrow));
77 // func:emdi12.TradeConditionSet.U.ReadStrptrMaybe
78 static bool U_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
79 // func:emdi12.TradeConditionSet.R.ReadStrptrMaybe
80 static bool R_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
81 // func:emdi12.TradeConditionSet.AX.ReadStrptrMaybe
82 static bool AX_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
83 // func:emdi12.TradeConditionSet.AY.ReadStrptrMaybe
84 static bool AY_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
85 // func:emdi12.TradeConditionSet.AJ.ReadStrptrMaybe
86 static bool AJ_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
87 // func:emdi12.TradeConditionSet.AW.ReadStrptrMaybe
88 static bool AW_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
89 // func:emdi12.TradeConditionSet.k.ReadStrptrMaybe
90 static bool k_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
91 // func:emdi12.TradeConditionSet.BD.ReadStrptrMaybe
92 static bool BD_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
93 // func:emdi12.TradeConditionSet.a.ReadStrptrMaybe
94 static bool a_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
95 // func:emdi12.TradeConditionSet.BC.ReadStrptrMaybe
96 static bool BC_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
97 // func:emdi12.TradeConditionSet.SA.ReadStrptrMaybe
98 static bool SA_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
99 // func:emdi12.TradeConditionSet.TC.ReadStrptrMaybe
100 static bool TC_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
101 // func:emdi12.TradeConditionSet.XR.ReadStrptrMaybe
102 static bool XR_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) __attribute__((nothrow));
103 // func:emdi12.TradeEntryGrp.TrdType.ReadStrptrMaybe
104 static bool TrdType_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
105 // func:emdi12.TradeEntryGrp.AlgorithmicTradeIndicator.ReadStrptrMaybe
106 static bool AlgorithmicTradeIndicator_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
107 // func:emdi12.TradeEntryGrp.TradeCondition.ReadStrptrMaybe
108 static bool TradeCondition_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
109 // func:emdi12.TradeEntryGrp.MultiLegReportingType.ReadStrptrMaybe
110 static bool MultiLegReportingType_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
111 // func:emdi12.TradeEntryGrp.MultiLegPriceModel.ReadStrptrMaybe
112 static bool MultiLegPriceModel_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
113 // func:emdi12.TradeEntryGrp.AggressorTime.ReadStrptrMaybe
114 static bool AggressorTime_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
115 // func:emdi12.TradeEntryGrp.RequestTime.ReadStrptrMaybe
116 static bool RequestTime_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
117 // func:emdi12.TradeEntryGrp.AggressorSide.ReadStrptrMaybe
118 static bool AggressorSide_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
119 // func:emdi12.TradeEntryGrp.NumberOfBuyOrders.ReadStrptrMaybe
120 static bool NumberOfBuyOrders_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
121 // func:emdi12.TradeEntryGrp.NumberOfSellOrders.ReadStrptrMaybe
122 static bool NumberOfSellOrders_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
123 // func:emdi12.TradeEntryGrp.TotalNumOfTrades.ReadStrptrMaybe
124 static bool TotalNumOfTrades_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
125 // func:emdi12.TradeEntryGrp.RestingCxlQty.ReadStrptrMaybe
126 static bool RestingCxlQty_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
127 // func:emdi12.TradeEntryGrp.MDEntryID.ReadStrptrMaybe
128 static bool MDEntryID_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
129 // func:emdi12.TradeEntryGrp.NonDisclosedTradeVolume.ReadStrptrMaybe
130 static bool NonDisclosedTradeVolume_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) __attribute__((nothrow));
131 // func:emdi12.MDIncGrp1.MDOriginType.ReadStrptrMaybe
132 static bool MDOriginType_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
133 // func:emdi12.MDIncGrp1.MDUpdateAction.ReadStrptrMaybe
134 static bool MDUpdateAction_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
135 // func:emdi12.MDIncGrp1.MDEntryType.ReadStrptrMaybe
136 static bool MDEntryType_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
137 // func:emdi12.MDIncGrp1.SecurityID.ReadStrptrMaybe
138 static bool SecurityID_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
139 // func:emdi12.MDIncGrp1.MDEntryPx.ReadStrptrMaybe
140 static bool MDEntryPx_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
141 // func:emdi12.MDIncGrp1.MDEntrySize.ReadStrptrMaybe
142 static bool MDEntrySize_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
143 // func:emdi12.MDIncGrp1.NumberOfOrders.ReadStrptrMaybe
144 static bool NumberOfOrders_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
145 // func:emdi12.MDIncGrp1.MDPriceLevel.ReadStrptrMaybe
146 static bool MDPriceLevel_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
147 // func:emdi12.MDIncGrp1.MDEntryTime.ReadStrptrMaybe
148 static bool MDEntryTime_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
149 // func:emdi12.MDIncGrp1.PotentialSecurityTradingEvent.ReadStrptrMaybe
150 static bool PotentialSecurityTradingEvent_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
151 // func:emdi12.MDIncGrp1.QuoteCondition.ReadStrptrMaybe
152 static bool QuoteCondition_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
153 // func:emdi12.MDIncGrp1.TradeEntryGrp.ReadStrptrMaybe
154 static bool TradeEntryGrp_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) __attribute__((nothrow));
155 // func:emdi12.MDSshGrp.MDOriginType.ReadStrptrMaybe
156 static bool MDOriginType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
157 // func:emdi12.MDSshGrp.MDEntryType.ReadStrptrMaybe
158 static bool MDEntryType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
159 // func:emdi12.MDSshGrp.MDBookType.ReadStrptrMaybe
160 static bool MDBookType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
161 // func:emdi12.MDSshGrp.MDSubBookType.ReadStrptrMaybe
162 static bool MDSubBookType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
163 // func:emdi12.MDSshGrp.TrdType.ReadStrptrMaybe
164 static bool TrdType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
165 // func:emdi12.MDSshGrp.TradingSessionID.ReadStrptrMaybe
166 static bool TradingSessionID_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
167 // func:emdi12.MDSshGrp.TradingSessionSubID.ReadStrptrMaybe
168 static bool TradingSessionSubID_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
169 // func:emdi12.MDSshGrp.TESTradSesStatus.ReadStrptrMaybe
170 static bool TESTradSesStatus_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
171 // func:emdi12.MDSshGrp.SecurityTradingStatus.ReadStrptrMaybe
172 static bool SecurityTradingStatus_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
173 // func:emdi12.MDSshGrp.MarketCondition.ReadStrptrMaybe
174 static bool MarketCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
175 // func:emdi12.MDSshGrp.FastMarketIndicator.ReadStrptrMaybe
176 static bool FastMarketIndicator_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
177 // func:emdi12.MDSshGrp.SecurityTradingEvent.ReadStrptrMaybe
178 static bool SecurityTradingEvent_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
179 // func:emdi12.MDSshGrp.PotentialSecurityTradingEvent.ReadStrptrMaybe
180 static bool PotentialSecurityTradingEvent_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
181 // func:emdi12.MDSshGrp.SoldOutIndicator.ReadStrptrMaybe
182 static bool SoldOutIndicator_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
183 // func:emdi12.MDSshGrp.HighPx.ReadStrptrMaybe
184 static bool HighPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
185 // func:emdi12.MDSshGrp.LowPx.ReadStrptrMaybe
186 static bool LowPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
187 // func:emdi12.MDSshGrp.TradeCondition.ReadStrptrMaybe
188 static bool TradeCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
189 // func:emdi12.MDSshGrp.MultiLegReportingType.ReadStrptrMaybe
190 static bool MultiLegReportingType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
191 // func:emdi12.MDSshGrp.MultiLegPriceModel.ReadStrptrMaybe
192 static bool MultiLegPriceModel_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
193 // func:emdi12.MDSshGrp.QuoteCondition.ReadStrptrMaybe
194 static bool QuoteCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
195 // func:emdi12.MDSshGrp.MDEntryPx.ReadStrptrMaybe
196 static bool MDEntryPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
197 // func:emdi12.MDSshGrp.MDEntrySize.ReadStrptrMaybe
198 static bool MDEntrySize_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
199 // func:emdi12.MDSshGrp.NumberOfOrders.ReadStrptrMaybe
200 static bool NumberOfOrders_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
201 // func:emdi12.MDSshGrp.MDPriceLevel.ReadStrptrMaybe
202 static bool MDPriceLevel_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
203 // func:emdi12.MDSshGrp.MDEntryTime.ReadStrptrMaybe
204 static bool MDEntryTime_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
205 // func:emdi12.MDSshGrp.NonDisclosedTradeVolume.ReadStrptrMaybe
206 static bool NonDisclosedTradeVolume_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
207 // func:emdi12.MDSshGrp.TotalNumOfTrades.ReadStrptrMaybe
208 static bool TotalNumOfTrades_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) __attribute__((nothrow));
209 // func:emdi12.DepthSnapshot.MsgSeqNum.ReadStrptrMaybe
210 static bool MsgSeqNum_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
211 // func:emdi12.DepthSnapshot.SenderCompID.ReadStrptrMaybe
212 static bool SenderCompID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
213 // func:emdi12.DepthSnapshot.LastMsgSeqNumProcessed.ReadStrptrMaybe
214 static bool LastMsgSeqNumProcessed_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
215 // func:emdi12.DepthSnapshot.RefreshIndicator.ReadStrptrMaybe
216 static bool RefreshIndicator_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
217 // func:emdi12.DepthSnapshot.MarketSegmentID.ReadStrptrMaybe
218 static bool MarketSegmentID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
219 // func:emdi12.DepthSnapshot.SecurityID.ReadStrptrMaybe
220 static bool SecurityID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
221 // func:emdi12.DepthSnapshot.ProductComplex.ReadStrptrMaybe
222 static bool ProductComplex_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
223 // func:emdi12.DepthSnapshot.SecurityStatus.ReadStrptrMaybe
224 static bool SecurityStatus_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
225 // func:emdi12.DepthSnapshot.TESSecurityStatus.ReadStrptrMaybe
226 static bool TESSecurityStatus_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
227 // func:emdi12.DepthSnapshot.LastUpdateTime.ReadStrptrMaybe
228 static bool LastUpdateTime_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) __attribute__((nothrow));
229 // func:emdi12.FlexibleInstrumentUpdate.MsgSeqNum.ReadStrptrMaybe
230 static bool MsgSeqNum_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
231 // func:emdi12.FlexibleInstrumentUpdate.SenderCompID.ReadStrptrMaybe
232 static bool SenderCompID_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
233 // func:emdi12.FlexibleInstrumentUpdate.SecurityID.ReadStrptrMaybe
234 static bool SecurityID_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
235 // func:emdi12.FlexibleInstrumentUpdate.SecurityDesc.ReadStrptrMaybe
236 static bool SecurityDesc_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
237 // func:emdi12.FlexibleInstrumentUpdate.SecurityType.ReadStrptrMaybe
238 static bool SecurityType_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
239 // func:emdi12.FlexibleInstrumentUpdate.ProductComplex.ReadStrptrMaybe
240 static bool ProductComplex_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
241 // func:emdi12.FlexibleInstrumentUpdate.MaturityDate.ReadStrptrMaybe
242 static bool MaturityDate_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
243 // func:emdi12.FlexibleInstrumentUpdate.StrikePrice.ReadStrptrMaybe
244 static bool StrikePrice_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
245 // func:emdi12.FlexibleInstrumentUpdate.PutOrCall.ReadStrptrMaybe
246 static bool PutOrCall_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
247 // func:emdi12.FlexibleInstrumentUpdate.OptAttribute.ReadStrptrMaybe
248 static bool OptAttribute_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
249 // func:emdi12.FlexibleInstrumentUpdate.ExerciseStyle.ReadStrptrMaybe
250 static bool ExerciseStyle_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
251 // func:emdi12.FlexibleInstrumentUpdate.SettlMethod.ReadStrptrMaybe
252 static bool SettlMethod_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
253 // func:emdi12.FlexibleInstrumentUpdate.MarketSegmentGrp2.ReadStrptrMaybe
254 static bool MarketSegmentGrp2_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
255 // func:emdi12.FlexibleInstrumentUpdate.TransactTime.ReadStrptrMaybe
256 static bool TransactTime_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) __attribute__((nothrow));
257 // func:emdi12.InstrumentStateChange.MsgSeqNum.ReadStrptrMaybe
258 static bool MsgSeqNum_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
259 // func:emdi12.InstrumentStateChange.SenderCompID.ReadStrptrMaybe
260 static bool SenderCompID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
261 // func:emdi12.InstrumentStateChange.MarketSegmentID.ReadStrptrMaybe
262 static bool MarketSegmentID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
263 // func:emdi12.InstrumentStateChange.SecurityID.ReadStrptrMaybe
264 static bool SecurityID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
265 // func:emdi12.InstrumentStateChange.SecurityStatus.ReadStrptrMaybe
266 static bool SecurityStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
267 // func:emdi12.InstrumentStateChange.SecurityTradingStatus.ReadStrptrMaybe
268 static bool SecurityTradingStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
269 // func:emdi12.InstrumentStateChange.MarketCondition.ReadStrptrMaybe
270 static bool MarketCondition_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
271 // func:emdi12.InstrumentStateChange.FastMarketIndicator.ReadStrptrMaybe
272 static bool FastMarketIndicator_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
273 // func:emdi12.InstrumentStateChange.SecurityTradingEvent.ReadStrptrMaybe
274 static bool SecurityTradingEvent_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
275 // func:emdi12.InstrumentStateChange.SoldOutIndicator.ReadStrptrMaybe
276 static bool SoldOutIndicator_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
277 // func:emdi12.InstrumentStateChange.HighPx.ReadStrptrMaybe
278 static bool HighPx_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
279 // func:emdi12.InstrumentStateChange.LowPx.ReadStrptrMaybe
280 static bool LowPx_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
281 // func:emdi12.InstrumentStateChange.TransactTime.ReadStrptrMaybe
282 static bool TransactTime_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
283 // func:emdi12.InstrumentStateChange.TESSecurityStatus.ReadStrptrMaybe
284 static bool TESSecurityStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
285 // func:emdi12.MDIncGrp2.MDUpdateAction.ReadStrptrMaybe
286 static bool MDUpdateAction_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
287 // func:emdi12.MDIncGrp2.MDEntryType.ReadStrptrMaybe
288 static bool MDEntryType_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
289 // func:emdi12.MDIncGrp2.MDSubBookType.ReadStrptrMaybe
290 static bool MDSubBookType_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
291 // func:emdi12.MDIncGrp2.SecurityID.ReadStrptrMaybe
292 static bool SecurityID_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
293 // func:emdi12.MDIncGrp2.MDEntryPx.ReadStrptrMaybe
294 static bool MDEntryPx_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
295 // func:emdi12.MDIncGrp2.MDEntrySize.ReadStrptrMaybe
296 static bool MDEntrySize_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
297 // func:emdi12.MDIncGrp2.MDEntryTime.ReadStrptrMaybe
298 static bool MDEntryTime_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
299 // func:emdi12.MDIncGrp2.QuoteCondition.ReadStrptrMaybe
300 static bool QuoteCondition_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) __attribute__((nothrow));
301 // func:emdi12.SecMassStatGrp.SecurityID.ReadStrptrMaybe
302 static bool SecurityID_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
303 // func:emdi12.SecMassStatGrp.SecurityStatus.ReadStrptrMaybe
304 static bool SecurityStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
305 // func:emdi12.SecMassStatGrp.SecurityTradingStatus.ReadStrptrMaybe
306 static bool SecurityTradingStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
307 // func:emdi12.SecMassStatGrp.MarketCondition.ReadStrptrMaybe
308 static bool MarketCondition_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
309 // func:emdi12.SecMassStatGrp.SecurityTradingEvent.ReadStrptrMaybe
310 static bool SecurityTradingEvent_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
311 // func:emdi12.SecMassStatGrp.SoldOutIndicator.ReadStrptrMaybe
312 static bool SoldOutIndicator_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
313 // func:emdi12.SecMassStatGrp.HighPx.ReadStrptrMaybe
314 static bool HighPx_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
315 // func:emdi12.SecMassStatGrp.LowPx.ReadStrptrMaybe
316 static bool LowPx_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
317 // func:emdi12.SecMassStatGrp.TESSecurityStatus.ReadStrptrMaybe
318 static bool TESSecurityStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) __attribute__((nothrow));
319 // func:emdi12.MassInstrumentStateChange.MsgSeqNum.ReadStrptrMaybe
320 static bool MsgSeqNum_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
321 // func:emdi12.MassInstrumentStateChange.SenderCompID.ReadStrptrMaybe
322 static bool SenderCompID_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
323 // func:emdi12.MassInstrumentStateChange.MarketSegmentID.ReadStrptrMaybe
324 static bool MarketSegmentID_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
325 // func:emdi12.MassInstrumentStateChange.InstrumentScopeProductComplex.ReadStrptrMaybe
326 static bool InstrumentScopeProductComplex_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
327 // func:emdi12.MassInstrumentStateChange.SecurityMassStatus.ReadStrptrMaybe
328 static bool SecurityMassStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
329 // func:emdi12.MassInstrumentStateChange.SecurityMassTradingStatus.ReadStrptrMaybe
330 static bool SecurityMassTradingStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
331 // func:emdi12.MassInstrumentStateChange.MassMarketCondition.ReadStrptrMaybe
332 static bool MassMarketCondition_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
333 // func:emdi12.MassInstrumentStateChange.FastMarketIndicator.ReadStrptrMaybe
334 static bool FastMarketIndicator_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
335 // func:emdi12.MassInstrumentStateChange.SecurityMassTradingEvent.ReadStrptrMaybe
336 static bool SecurityMassTradingEvent_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
337 // func:emdi12.MassInstrumentStateChange.MassSoldOutIndicator.ReadStrptrMaybe
338 static bool MassSoldOutIndicator_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
339 // func:emdi12.MassInstrumentStateChange.TransactTime.ReadStrptrMaybe
340 static bool TransactTime_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
341 // func:emdi12.MassInstrumentStateChange.TESSecurityMassStatus.ReadStrptrMaybe
342 static bool TESSecurityMassStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
343 // func:emdi12.MassInstrumentStateChange.LastFragment.ReadStrptrMaybe
344 static bool LastFragment_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
345 // func:emdi12.ProductStateChange.MsgSeqNum.ReadStrptrMaybe
346 static bool MsgSeqNum_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
347 // func:emdi12.ProductStateChange.SenderCompID.ReadStrptrMaybe
348 static bool SenderCompID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
349 // func:emdi12.ProductStateChange.MarketSegmentID.ReadStrptrMaybe
350 static bool MarketSegmentID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
351 // func:emdi12.ProductStateChange.TradingSessionID.ReadStrptrMaybe
352 static bool TradingSessionID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
353 // func:emdi12.ProductStateChange.TradingSessionSubID.ReadStrptrMaybe
354 static bool TradingSessionSubID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
355 // func:emdi12.ProductStateChange.TradSesStatus.ReadStrptrMaybe
356 static bool TradSesStatus_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
357 // func:emdi12.ProductStateChange.MarketCondition.ReadStrptrMaybe
358 static bool MarketCondition_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
359 // func:emdi12.ProductStateChange.FastMarketIndicator.ReadStrptrMaybe
360 static bool FastMarketIndicator_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
361 // func:emdi12.ProductStateChange.TransactTime.ReadStrptrMaybe
362 static bool TransactTime_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
363 // func:emdi12.ProductStateChange.TESTradSesStatus.ReadStrptrMaybe
364 static bool TESTradSesStatus_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) __attribute__((nothrow));
365 // func:emdi12.QuotReqGrp.SecurityID.ReadStrptrMaybe
366 static bool SecurityID_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) __attribute__((nothrow));
367 // func:emdi12.QuotReqGrp.Side.ReadStrptrMaybe
368 static bool Side_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) __attribute__((nothrow));
369 // func:emdi12.QuotReqGrp.OrderQty.ReadStrptrMaybe
370 static bool OrderQty_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) __attribute__((nothrow));
371 // func:emdi12.QuotReqGrp.TransactTime.ReadStrptrMaybe
372 static bool TransactTime_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) __attribute__((nothrow));
373 // func:emdi12...SizeCheck
374 static void SizeCheck();
375} // gen:ns_print_proto
376
377// --- emdi12.AlgorithmicTradeIndicator.value.ToCstr
378// Convert numeric value of field to one of predefined string constants.
379// If string is found, return a static C string. Otherwise, return NULL.
380const char* emdi12::value_ToCstr(const emdi12::AlgorithmicTradeIndicator& parent) {
381 const char *ret = NULL;
382 switch(value_GetEnum(parent)) {
383 case emdi12_AlgorithmicTradeIndicator_1: ret = "1"; break;
384 }
385 return ret;
386}
387
388// --- emdi12.AlgorithmicTradeIndicator.value.Print
389// Convert value to a string. First, attempt conversion to a known string.
390// If no string matches, print value as a numeric value.
391void emdi12::value_Print(const emdi12::AlgorithmicTradeIndicator& parent, algo::cstring &lhs) {
392 const char *strval = value_ToCstr(parent);
393 if (strval) {
394 lhs << strval;
395 } else {
396 lhs << parent.value;
397 }
398}
399
400// --- emdi12.AlgorithmicTradeIndicator.value.SetStrptrMaybe
401// Convert string to field.
402// If the string is invalid, do not modify field and return false.
403// In case of success, return true
404bool emdi12::value_SetStrptrMaybe(emdi12::AlgorithmicTradeIndicator& parent, algo::strptr rhs) {
405 bool ret = false;
406 switch (elems_N(rhs)) {
407 case 1: {
408 switch (u64(rhs[0])) {
409 case '1': {
410 value_SetEnum(parent,emdi12_AlgorithmicTradeIndicator_1); ret = true; break;
411 }
412 }
413 break;
414 }
415 }
416 return ret;
417}
418
419// --- emdi12.AlgorithmicTradeIndicator.value.SetStrptr
420// Convert string to field.
421// If the string is invalid, set numeric value to DFLT
422void emdi12::value_SetStrptr(emdi12::AlgorithmicTradeIndicator& parent, algo::strptr rhs, emdi12_AlgorithmicTradeIndicatorEnum dflt) {
423 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
424}
425
426// --- emdi12.AlgorithmicTradeIndicator.value.ReadStrptrMaybe
427// Convert string to field. Return success value
428bool emdi12::value_ReadStrptrMaybe(emdi12::AlgorithmicTradeIndicator& parent, algo::strptr rhs) {
429 bool retval = false;
430 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
431 if (!retval) { // didn't work? try reading as underlying type
432 retval = u32_ReadStrptrMaybe(parent.value,rhs);
433 }
434 return retval;
435}
436
437// --- emdi12.AlgorithmicTradeIndicator..ReadStrptrMaybe
438// Read fields of emdi12::AlgorithmicTradeIndicator from an ascii string.
439// The format of the string is the format of the emdi12::AlgorithmicTradeIndicator's only field
440bool emdi12::AlgorithmicTradeIndicator_ReadStrptrMaybe(emdi12::AlgorithmicTradeIndicator &parent, algo::strptr in_str) {
441 bool retval = true;
442 retval = retval && value_ReadStrptrMaybe(parent, in_str);
443 return retval;
444}
445
446// --- emdi12.AlgorithmicTradeIndicator..Print
447// print string representation of ROW to string STR
448// cfmt:emdi12.AlgorithmicTradeIndicator.String printfmt:Raw
449void emdi12::AlgorithmicTradeIndicator_Print(emdi12::AlgorithmicTradeIndicator row, algo::cstring& str) {
450 emdi12::value_Print(row, str);
451}
452
453// --- emdi12.Beacon.base.CopyOut
454// Copy fields out of row
455void emdi12::parent_CopyOut(emdi12::Beacon &row, emdi12::TemplateHeader &out) {
456 // length: field value is computed
457 // id: field value is computed
458 (void)row;//only to avoid -Wunused-parameter
459 (void)out;//only to avoid -Wunused-parameter
460}
461
462// --- emdi12.Beacon..ReadFieldMaybe
463bool emdi12::Beacon_ReadFieldMaybe(emdi12::Beacon& parent, algo::strptr field, algo::strptr strval) {
464 bool retval = true;
465 emdi12::FieldId field_id;
466 (void)value_SetStrptrMaybe(field_id,field);
467 switch(field_id) {
468 case emdi12_FieldId_base: {
469 retval = false;
470 break;
471 }
472 case emdi12_FieldId_length: {
473 retval = false;
474 break;
475 }
476 case emdi12_FieldId_id: {
477 retval = false;
478 break;
479 }
480 case emdi12_FieldId_MsgType: {
481 retval = true;
482 break;
483 }
484 case emdi12_FieldId_SenderCompID: {
485 retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
486 break;
487 }
488 case emdi12_FieldId_SenderSubID: {
489 retval = u32_ReadStrptrMaybe(parent.SenderSubID, strval);
490 break;
491 }
492 case emdi12_FieldId_LastMsgSeqNumProcessed: {
493 retval = u32_ReadStrptrMaybe(parent.LastMsgSeqNumProcessed, strval);
494 break;
495 }
496 default: break;
497 }
498 if (!retval) {
499 algo_lib::AppendErrtext("attr",field);
500 }
501 return retval;
502}
503
504// --- emdi12.Beacon..ReadStrptrMaybe
505// Read fields of emdi12::Beacon from an ascii string.
506// The format of the string is an ssim Tuple
507bool emdi12::Beacon_ReadStrptrMaybe(emdi12::Beacon &parent, algo::strptr in_str) {
508 bool retval = true;
509 retval = algo::StripTypeTag(in_str, "emdi12.Beacon");
510 ind_beg(algo::Attr_curs, attr, in_str) {
511 retval = retval && Beacon_ReadFieldMaybe(parent, attr.name, attr.value);
512 }ind_end;
513 return retval;
514}
515
516// --- emdi12.Beacon..Print
517// print string representation of ROW to string STR
518// cfmt:emdi12.Beacon.String printfmt:Tuple
519void emdi12::Beacon_Print(emdi12::Beacon& row, algo::cstring& str) {
520 algo::tempstr temp;
521 str << "emdi12.Beacon";
522
523 algo::strptr_Print(MsgType_Get(row), temp);
524 PrintAttrSpaceReset(str,"MsgType", temp);
525
526 u32_Print(row.SenderCompID, temp);
527 PrintAttrSpaceReset(str,"SenderCompID", temp);
528
529 u32_Print(row.SenderSubID, temp);
530 PrintAttrSpaceReset(str,"SenderSubID", temp);
531
532 u32_Print(row.LastMsgSeqNumProcessed, temp);
533 PrintAttrSpaceReset(str,"LastMsgSeqNumProcessed", temp);
534}
535
536// --- emdi12.Beacon..FastEncode
537void emdi12::Beacon_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::Beacon& parent) {
538 int index = ary_N(buf);
539 u64 pmap(0);
540 if (!tid_AssignedQ(state) || parent.id != state.tid) {
541 lib_fast::EncodeUnsigned(buf,parent.id,false);
542 lib_fast::SetPmapBit(pmap,0);
543 }
544 tid_SetAssigned(state);
545 state.tid = parent.id;
546 // MsgType string constant mandatory
547 // SenderCompID unsigned copy mandatory
548 if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
549 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
550 lib_fast::SetPmapBit(pmap,1);
551 }
552 state.SenderCompID = parent.SenderCompID;
553 SenderCompID_SetAssigned(state);
554 // SenderSubID unsigned copy mandatory
555 if (!SenderSubID_AssignedQ(state) || parent.SenderSubID != state.SenderSubID) {
556 lib_fast::EncodeUnsigned(buf,parent.SenderSubID,false);
557 lib_fast::SetPmapBit(pmap,2);
558 }
559 state.SenderSubID = parent.SenderSubID;
560 SenderSubID_SetAssigned(state);
561 // LastMsgSeqNumProcessed unsigned none mandatory
562 lib_fast::EncodeUnsigned(buf,parent.LastMsgSeqNumProcessed,false);
563 lib_fast::InsertPmap(buf,index,pmap);
564}
565
566// --- emdi12.Beacon..FastDecode
567bool emdi12::Beacon_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::Beacon& parent) {
568 bool ok = true;
569 // MsgType string constant mandatory
570 if (ok) {
571 }
572 // SenderCompID unsigned copy mandatory
573 if (ok) {
574 bool prs = lib_fast::GetPmapBit(pmap,1);
575 if (prs) {
576 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
577 if (!ok) {
578 state.error << "emdi12.Beacon.SenderCompID: bad Unsigned" << eol;
579 }
580 } else if (SenderCompID_AssignedQ(state)) {
581 parent.SenderCompID = state.SenderCompID;
582 } else {
583 ok = false;
584 state.error << "emdi12.Beacon.SenderCompID: copy operator: previous value unassigned" << eol;
585 }
586 SenderCompID_SetAssigned(state);
587 state.SenderCompID = parent.SenderCompID;
588 }
589 // SenderSubID unsigned copy mandatory
590 if (ok) {
591 bool prs = lib_fast::GetPmapBit(pmap,2);
592 if (prs) {
593 ok = lib_fast::DecodeUnsigned(from,parent.SenderSubID,false);
594 if (!ok) {
595 state.error << "emdi12.Beacon.SenderSubID: bad Unsigned" << eol;
596 }
597 } else if (SenderSubID_AssignedQ(state)) {
598 parent.SenderSubID = state.SenderSubID;
599 } else {
600 ok = false;
601 state.error << "emdi12.Beacon.SenderSubID: copy operator: previous value unassigned" << eol;
602 }
603 SenderSubID_SetAssigned(state);
604 state.SenderSubID = parent.SenderSubID;
605 }
606 // LastMsgSeqNumProcessed unsigned none mandatory
607 if (ok) {
608 ok = lib_fast::DecodeUnsigned(from,parent.LastMsgSeqNumProcessed,false);
609 if (!ok) {
610 state.error << "emdi12.Beacon.LastMsgSeqNumProcessed: bad Unsigned" << eol;
611 }
612 }
613 return ok;
614}
615
616// --- emdi12.Beacon..FixEncode
617void emdi12::Beacon_FixEncode(cstring& buf, emdi12::Beacon& parent, char soh) {
618 buf << "35=" << MsgType_Get(parent) << soh;
619 buf << "49=" << parent.SenderCompID << soh;
620 buf << "50=" << parent.SenderSubID << soh;
621 buf << "369=" << parent.LastMsgSeqNumProcessed << soh;
622}
623
624// --- emdi12.SecurityType.value.ToCstr
625// Convert numeric value of field to one of predefined string constants.
626// If string is found, return a static C string. Otherwise, return NULL.
627const char* emdi12::value_ToCstr(const emdi12::SecurityType& parent) {
628 const char *ret = NULL;
629 switch(value_GetEnum(parent)) {
630 case emdi12_SecurityType_OPT : ret = "OPT"; break;
631 case emdi12_SecurityType_FUT : ret = "FUT"; break;
632 case emdi12_SecurityType_MLEG : ret = "MLEG"; break;
633 case emdi12_SecurityType_VAR : ret = "VAR"; break;
634 case emdi12_SecurityType_TRF : ret = "TRF"; break;
635 case emdi12_SecurityType_CS : ret = "CS"; break;
636 case emdi12_SecurityType_BOND : ret = "BOND"; break;
637 case emdi12_SecurityType_TARP : ret = "TARP"; break;
638 case emdi12_SecurityType_ETF : ret = "ETF"; break;
639 case emdi12_SecurityType_ETC : ret = "ETC"; break;
640 case emdi12_SecurityType_ETN : ret = "ETN"; break;
641 case emdi12_SecurityType_WAR : ret = "WAR"; break;
642 case emdi12_SecurityType_OTHER : ret = "OTHER"; break;
643 case emdi12_SecurityType_SR : ret = "SR"; break;
644 case emdi12_SecurityType_FUN : ret = "FUN"; break;
645 case emdi12_SecurityType_DA : ret = "DA"; break;
646 }
647 return ret;
648}
649
650// --- emdi12.SecurityType.value.Print
651// Convert value to a string. First, attempt conversion to a known string.
652// If no string matches, print value as a numeric value.
653void emdi12::value_Print(const emdi12::SecurityType& parent, algo::cstring &lhs) {
654 const char *strval = value_ToCstr(parent);
655 if (strval) {
656 lhs << strval;
657 } else {
658 lhs << parent.value;
659 }
660}
661
662// --- emdi12.SecurityType.value.SetStrptrMaybe
663// Convert string to field.
664// If the string is invalid, do not modify field and return false.
665// In case of success, return true
666bool emdi12::value_SetStrptrMaybe(emdi12::SecurityType& parent, algo::strptr rhs) {
667 bool ret = false;
668 switch (elems_N(rhs)) {
669 case 2: {
670 switch (u64(algo::ReadLE16(rhs.elems))) {
671 case LE_STR2('C','S'): {
672 value_SetEnum(parent,emdi12_SecurityType_CS); ret = true; break;
673 }
674 case LE_STR2('D','A'): {
675 value_SetEnum(parent,emdi12_SecurityType_DA); ret = true; break;
676 }
677 case LE_STR2('S','R'): {
678 value_SetEnum(parent,emdi12_SecurityType_SR); ret = true; break;
679 }
680 }
681 break;
682 }
683 case 3: {
684 switch (u64(algo::ReadLE16(rhs.elems))|(u64(rhs[2])<<16)) {
685 case LE_STR3('E','T','C'): {
686 value_SetEnum(parent,emdi12_SecurityType_ETC); ret = true; break;
687 }
688 case LE_STR3('E','T','F'): {
689 value_SetEnum(parent,emdi12_SecurityType_ETF); ret = true; break;
690 }
691 case LE_STR3('E','T','N'): {
692 value_SetEnum(parent,emdi12_SecurityType_ETN); ret = true; break;
693 }
694 case LE_STR3('F','U','N'): {
695 value_SetEnum(parent,emdi12_SecurityType_FUN); ret = true; break;
696 }
697 case LE_STR3('F','U','T'): {
698 value_SetEnum(parent,emdi12_SecurityType_FUT); ret = true; break;
699 }
700 case LE_STR3('O','P','T'): {
701 value_SetEnum(parent,emdi12_SecurityType_OPT); ret = true; break;
702 }
703 case LE_STR3('T','R','F'): {
704 value_SetEnum(parent,emdi12_SecurityType_TRF); ret = true; break;
705 }
706 case LE_STR3('V','A','R'): {
707 value_SetEnum(parent,emdi12_SecurityType_VAR); ret = true; break;
708 }
709 case LE_STR3('W','A','R'): {
710 value_SetEnum(parent,emdi12_SecurityType_WAR); ret = true; break;
711 }
712 }
713 break;
714 }
715 case 4: {
716 switch (u64(algo::ReadLE32(rhs.elems))) {
717 case LE_STR4('B','O','N','D'): {
718 value_SetEnum(parent,emdi12_SecurityType_BOND); ret = true; break;
719 }
720 case LE_STR4('M','L','E','G'): {
721 value_SetEnum(parent,emdi12_SecurityType_MLEG); ret = true; break;
722 }
723 case LE_STR4('T','A','R','P'): {
724 value_SetEnum(parent,emdi12_SecurityType_TARP); ret = true; break;
725 }
726 }
727 break;
728 }
729 case 5: {
730 switch (u64(algo::ReadLE32(rhs.elems))|(u64(rhs[4])<<32)) {
731 case LE_STR5('O','T','H','E','R'): {
732 value_SetEnum(parent,emdi12_SecurityType_OTHER); ret = true; break;
733 }
734 }
735 break;
736 }
737 }
738 return ret;
739}
740
741// --- emdi12.SecurityType.value.SetStrptr
742// Convert string to field.
743// If the string is invalid, set numeric value to DFLT
744void emdi12::value_SetStrptr(emdi12::SecurityType& parent, algo::strptr rhs, emdi12_SecurityTypeEnum dflt) {
745 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
746}
747
748// --- emdi12.SecurityType.value.ReadStrptrMaybe
749// Convert string to field. Return success value
750bool emdi12::value_ReadStrptrMaybe(emdi12::SecurityType& parent, algo::strptr rhs) {
751 bool retval = false;
752 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
753 if (!retval) { // didn't work? try reading as underlying type
754 retval = u32_ReadStrptrMaybe(parent.value,rhs);
755 }
756 return retval;
757}
758
759// --- emdi12.SecurityType..ReadStrptrMaybe
760// Read fields of emdi12::SecurityType from an ascii string.
761// The format of the string is the format of the emdi12::SecurityType's only field
762bool emdi12::SecurityType_ReadStrptrMaybe(emdi12::SecurityType &parent, algo::strptr in_str) {
763 bool retval = true;
764 retval = retval && value_ReadStrptrMaybe(parent, in_str);
765 return retval;
766}
767
768// --- emdi12.SecurityType..Print
769// print string representation of ROW to string STR
770// cfmt:emdi12.SecurityType.String printfmt:Raw
771void emdi12::SecurityType_Print(emdi12::SecurityType row, algo::cstring& str) {
772 emdi12::value_Print(row, str);
773}
774
775// --- emdi12.ProductComplex.value.ToCstr
776// Convert numeric value of field to one of predefined string constants.
777// If string is found, return a static C string. Otherwise, return NULL.
778const char* emdi12::value_ToCstr(const emdi12::ProductComplex& parent) {
779 const char *ret = NULL;
780 switch(value_GetEnum(parent)) {
781 case emdi12_ProductComplex_1 : ret = "1"; break;
782 case emdi12_ProductComplex_2 : ret = "2"; break;
783 case emdi12_ProductComplex_3 : ret = "3"; break;
784 case emdi12_ProductComplex_4 : ret = "4"; break;
785 case emdi12_ProductComplex_5 : ret = "5"; break;
786 case emdi12_ProductComplex_6 : ret = "6"; break;
787 case emdi12_ProductComplex_7 : ret = "7"; break;
788 case emdi12_ProductComplex_8 : ret = "8"; break;
789 case emdi12_ProductComplex_9 : ret = "9"; break;
790 case emdi12_ProductComplex_10 : ret = "10"; break;
791 case emdi12_ProductComplex_11 : ret = "11"; break;
792 case emdi12_ProductComplex_12 : ret = "12"; break;
793 }
794 return ret;
795}
796
797// --- emdi12.ProductComplex.value.Print
798// Convert value to a string. First, attempt conversion to a known string.
799// If no string matches, print value as a numeric value.
800void emdi12::value_Print(const emdi12::ProductComplex& parent, algo::cstring &lhs) {
801 const char *strval = value_ToCstr(parent);
802 if (strval) {
803 lhs << strval;
804 } else {
805 lhs << parent.value;
806 }
807}
808
809// --- emdi12.ProductComplex.value.SetStrptrMaybe
810// Convert string to field.
811// If the string is invalid, do not modify field and return false.
812// In case of success, return true
813bool emdi12::value_SetStrptrMaybe(emdi12::ProductComplex& parent, algo::strptr rhs) {
814 bool ret = false;
815 switch (elems_N(rhs)) {
816 case 1: {
817 switch (u64(rhs[0])) {
818 case '1': {
819 value_SetEnum(parent,emdi12_ProductComplex_1); ret = true; break;
820 }
821 case '2': {
822 value_SetEnum(parent,emdi12_ProductComplex_2); ret = true; break;
823 }
824 case '3': {
825 value_SetEnum(parent,emdi12_ProductComplex_3); ret = true; break;
826 }
827 case '4': {
828 value_SetEnum(parent,emdi12_ProductComplex_4); ret = true; break;
829 }
830 case '5': {
831 value_SetEnum(parent,emdi12_ProductComplex_5); ret = true; break;
832 }
833 case '6': {
834 value_SetEnum(parent,emdi12_ProductComplex_6); ret = true; break;
835 }
836 case '7': {
837 value_SetEnum(parent,emdi12_ProductComplex_7); ret = true; break;
838 }
839 case '8': {
840 value_SetEnum(parent,emdi12_ProductComplex_8); ret = true; break;
841 }
842 case '9': {
843 value_SetEnum(parent,emdi12_ProductComplex_9); ret = true; break;
844 }
845 }
846 break;
847 }
848 case 2: {
849 switch (u64(algo::ReadLE16(rhs.elems))) {
850 case LE_STR2('1','0'): {
851 value_SetEnum(parent,emdi12_ProductComplex_10); ret = true; break;
852 }
853 case LE_STR2('1','1'): {
854 value_SetEnum(parent,emdi12_ProductComplex_11); ret = true; break;
855 }
856 case LE_STR2('1','2'): {
857 value_SetEnum(parent,emdi12_ProductComplex_12); ret = true; break;
858 }
859 }
860 break;
861 }
862 }
863 return ret;
864}
865
866// --- emdi12.ProductComplex.value.SetStrptr
867// Convert string to field.
868// If the string is invalid, set numeric value to DFLT
869void emdi12::value_SetStrptr(emdi12::ProductComplex& parent, algo::strptr rhs, emdi12_ProductComplexEnum dflt) {
870 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
871}
872
873// --- emdi12.ProductComplex.value.ReadStrptrMaybe
874// Convert string to field. Return success value
875bool emdi12::value_ReadStrptrMaybe(emdi12::ProductComplex& parent, algo::strptr rhs) {
876 bool retval = false;
877 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
878 if (!retval) { // didn't work? try reading as underlying type
879 retval = u32_ReadStrptrMaybe(parent.value,rhs);
880 }
881 return retval;
882}
883
884// --- emdi12.ProductComplex..ReadStrptrMaybe
885// Read fields of emdi12::ProductComplex from an ascii string.
886// The format of the string is the format of the emdi12::ProductComplex's only field
887bool emdi12::ProductComplex_ReadStrptrMaybe(emdi12::ProductComplex &parent, algo::strptr in_str) {
888 bool retval = true;
889 retval = retval && value_ReadStrptrMaybe(parent, in_str);
890 return retval;
891}
892
893// --- emdi12.ProductComplex..Print
894// print string representation of ROW to string STR
895// cfmt:emdi12.ProductComplex.String printfmt:Raw
896void emdi12::ProductComplex_Print(emdi12::ProductComplex row, algo::cstring& str) {
897 emdi12::value_Print(row, str);
898}
899
900// --- emdi12.LastFragment.value.ToCstr
901// Convert numeric value of field to one of predefined string constants.
902// If string is found, return a static C string. Otherwise, return NULL.
903const char* emdi12::value_ToCstr(const emdi12::LastFragment& parent) {
904 const char *ret = NULL;
905 switch(value_GetEnum(parent)) {
906 case emdi12_LastFragment_N : ret = "N"; break;
907 case emdi12_LastFragment_Y : ret = "Y"; break;
908 }
909 return ret;
910}
911
912// --- emdi12.LastFragment.value.Print
913// Convert value to a string. First, attempt conversion to a known string.
914// If no string matches, print value as a numeric value.
915void emdi12::value_Print(const emdi12::LastFragment& parent, algo::cstring &lhs) {
916 const char *strval = value_ToCstr(parent);
917 if (strval) {
918 lhs << strval;
919 } else {
920 lhs << parent.value;
921 }
922}
923
924// --- emdi12.LastFragment.value.SetStrptrMaybe
925// Convert string to field.
926// If the string is invalid, do not modify field and return false.
927// In case of success, return true
928bool emdi12::value_SetStrptrMaybe(emdi12::LastFragment& parent, algo::strptr rhs) {
929 bool ret = false;
930 switch (elems_N(rhs)) {
931 case 1: {
932 switch (u64(rhs[0])) {
933 case 'N': {
934 value_SetEnum(parent,emdi12_LastFragment_N); ret = true; break;
935 }
936 case 'Y': {
937 value_SetEnum(parent,emdi12_LastFragment_Y); ret = true; break;
938 }
939 }
940 break;
941 }
942 }
943 return ret;
944}
945
946// --- emdi12.LastFragment.value.SetStrptr
947// Convert string to field.
948// If the string is invalid, set numeric value to DFLT
949void emdi12::value_SetStrptr(emdi12::LastFragment& parent, algo::strptr rhs, emdi12_LastFragmentEnum dflt) {
950 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
951}
952
953// --- emdi12.LastFragment.value.ReadStrptrMaybe
954// Convert string to field. Return success value
955bool emdi12::value_ReadStrptrMaybe(emdi12::LastFragment& parent, algo::strptr rhs) {
956 bool retval = false;
957 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
958 if (!retval) { // didn't work? try reading as underlying type
959 retval = u32_ReadStrptrMaybe(parent.value,rhs);
960 }
961 return retval;
962}
963
964// --- emdi12.LastFragment..ReadStrptrMaybe
965// Read fields of emdi12::LastFragment from an ascii string.
966// The format of the string is the format of the emdi12::LastFragment's only field
967bool emdi12::LastFragment_ReadStrptrMaybe(emdi12::LastFragment &parent, algo::strptr in_str) {
968 bool retval = true;
969 retval = retval && value_ReadStrptrMaybe(parent, in_str);
970 return retval;
971}
972
973// --- emdi12.LastFragment..Print
974// print string representation of ROW to string STR
975// cfmt:emdi12.LastFragment.String printfmt:Raw
976void emdi12::LastFragment_Print(emdi12::LastFragment row, algo::cstring& str) {
977 emdi12::value_Print(row, str);
978}
979
980// --- emdi12.ImpliedMarketIndicator.value.ToCstr
981// Convert numeric value of field to one of predefined string constants.
982// If string is found, return a static C string. Otherwise, return NULL.
983const char* emdi12::value_ToCstr(const emdi12::ImpliedMarketIndicator& parent) {
984 const char *ret = NULL;
985 switch(value_GetEnum(parent)) {
986 case emdi12_ImpliedMarketIndicator_0: ret = "0"; break;
987 case emdi12_ImpliedMarketIndicator_3: ret = "3"; break;
988 }
989 return ret;
990}
991
992// --- emdi12.ImpliedMarketIndicator.value.Print
993// Convert value to a string. First, attempt conversion to a known string.
994// If no string matches, print value as a numeric value.
995void emdi12::value_Print(const emdi12::ImpliedMarketIndicator& parent, algo::cstring &lhs) {
996 const char *strval = value_ToCstr(parent);
997 if (strval) {
998 lhs << strval;
999 } else {
1000 lhs << parent.value;
1001 }
1002}
1003
1004// --- emdi12.ImpliedMarketIndicator.value.SetStrptrMaybe
1005// Convert string to field.
1006// If the string is invalid, do not modify field and return false.
1007// In case of success, return true
1008bool emdi12::value_SetStrptrMaybe(emdi12::ImpliedMarketIndicator& parent, algo::strptr rhs) {
1009 bool ret = false;
1010 switch (elems_N(rhs)) {
1011 case 1: {
1012 switch (u64(rhs[0])) {
1013 case '0': {
1014 value_SetEnum(parent,emdi12_ImpliedMarketIndicator_0); ret = true; break;
1015 }
1016 case '3': {
1017 value_SetEnum(parent,emdi12_ImpliedMarketIndicator_3); ret = true; break;
1018 }
1019 }
1020 break;
1021 }
1022 }
1023 return ret;
1024}
1025
1026// --- emdi12.ImpliedMarketIndicator.value.SetStrptr
1027// Convert string to field.
1028// If the string is invalid, set numeric value to DFLT
1029void emdi12::value_SetStrptr(emdi12::ImpliedMarketIndicator& parent, algo::strptr rhs, emdi12_ImpliedMarketIndicatorEnum dflt) {
1030 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
1031}
1032
1033// --- emdi12.ImpliedMarketIndicator.value.ReadStrptrMaybe
1034// Convert string to field. Return success value
1035bool emdi12::value_ReadStrptrMaybe(emdi12::ImpliedMarketIndicator& parent, algo::strptr rhs) {
1036 bool retval = false;
1037 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
1038 if (!retval) { // didn't work? try reading as underlying type
1039 retval = u32_ReadStrptrMaybe(parent.value,rhs);
1040 }
1041 return retval;
1042}
1043
1044// --- emdi12.ImpliedMarketIndicator..ReadStrptrMaybe
1045// Read fields of emdi12::ImpliedMarketIndicator from an ascii string.
1046// The format of the string is the format of the emdi12::ImpliedMarketIndicator's only field
1047bool emdi12::ImpliedMarketIndicator_ReadStrptrMaybe(emdi12::ImpliedMarketIndicator &parent, algo::strptr in_str) {
1048 bool retval = true;
1049 retval = retval && value_ReadStrptrMaybe(parent, in_str);
1050 return retval;
1051}
1052
1053// --- emdi12.ImpliedMarketIndicator..Print
1054// print string representation of ROW to string STR
1055// cfmt:emdi12.ImpliedMarketIndicator.String printfmt:Raw
1056void emdi12::ImpliedMarketIndicator_Print(emdi12::ImpliedMarketIndicator row, algo::cstring& str) {
1057 emdi12::value_Print(row, str);
1058}
1059
1060// --- emdi12.MarketSegmentGrp1..ReadFieldMaybe
1061bool emdi12::MarketSegmentGrp1_ReadFieldMaybe(emdi12::MarketSegmentGrp1& parent, algo::strptr field, algo::strptr strval) {
1062 bool retval = true;
1063 emdi12::FieldId field_id;
1064 (void)value_SetStrptrMaybe(field_id,field);
1065 switch(field_id) {
1066 case emdi12_FieldId_MarketSegmentID: {
1067 retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
1068 break;
1069 }
1070 case emdi12_FieldId_ImpliedMarketIndicator: {
1071 retval = emdi12::ImpliedMarketIndicator_ReadStrptrMaybe(parent.ImpliedMarketIndicator, strval);
1072 break;
1073 }
1074 default: break;
1075 }
1076 if (!retval) {
1077 algo_lib::AppendErrtext("attr",field);
1078 }
1079 return retval;
1080}
1081
1082// --- emdi12.MarketSegmentGrp1..ReadStrptrMaybe
1083// Read fields of emdi12::MarketSegmentGrp1 from an ascii string.
1084// The format of the string is an ssim Tuple
1085bool emdi12::MarketSegmentGrp1_ReadStrptrMaybe(emdi12::MarketSegmentGrp1 &parent, algo::strptr in_str) {
1086 bool retval = true;
1087 retval = algo::StripTypeTag(in_str, "emdi12.MarketSegmentGrp1");
1088 ind_beg(algo::Attr_curs, attr, in_str) {
1089 retval = retval && MarketSegmentGrp1_ReadFieldMaybe(parent, attr.name, attr.value);
1090 }ind_end;
1091 return retval;
1092}
1093
1094// --- emdi12.MarketSegmentGrp1..Print
1095// print string representation of ROW to string STR
1096// cfmt:emdi12.MarketSegmentGrp1.String printfmt:Tuple
1097void emdi12::MarketSegmentGrp1_Print(emdi12::MarketSegmentGrp1& row, algo::cstring& str) {
1098 algo::tempstr temp;
1099 str << "emdi12.MarketSegmentGrp1";
1100
1101 u32_Print(row.MarketSegmentID, temp);
1102 PrintAttrSpaceReset(str,"MarketSegmentID", temp);
1103
1104 emdi12::ImpliedMarketIndicator_Print(row.ImpliedMarketIndicator, temp);
1105 PrintAttrSpaceReset(str,"ImpliedMarketIndicator", temp);
1106}
1107
1108// --- emdi12.MarketSegmentGrp1..FastEncode
1109void emdi12::MarketSegmentGrp1_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MarketSegmentGrp1& parent) {
1110 int index = ary_N(buf);
1111 u64 pmap(0);
1112 // MarketSegmentID unsigned copy mandatory
1113 if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
1114 lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
1115 lib_fast::SetPmapBit(pmap,0);
1116 }
1117 state.MarketSegmentID = parent.MarketSegmentID;
1118 MarketSegmentID_SetAssigned(state);
1119 // ImpliedMarketIndicator type none mandatory
1120 lib_fast::EncodeUnsigned(buf,parent.ImpliedMarketIndicator.value,false);
1121 lib_fast::InsertPmap(buf,index,pmap);
1122}
1123
1124// --- emdi12.MarketSegmentGrp1..FastDecode
1125bool emdi12::MarketSegmentGrp1_FastDecode(algo::memptr& from, FastState& state, emdi12::MarketSegmentGrp1& parent) {
1126 bool ok = true;
1127 u64 pmap;
1128 ok = lib_fast::DecodePmap(from,pmap);
1129 if (!ok) {
1130 state.error << "emdi12.MarketSegmentGrp1: bad pmap" << eol;
1131 }
1132 // MarketSegmentID unsigned copy mandatory
1133 if (ok) {
1134 bool prs = lib_fast::GetPmapBit(pmap,0);
1135 if (prs) {
1136 ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
1137 if (!ok) {
1138 state.error << "emdi12.MarketSegmentGrp1.MarketSegmentID: bad Unsigned" << eol;
1139 }
1140 } else if (MarketSegmentID_AssignedQ(state)) {
1141 parent.MarketSegmentID = state.MarketSegmentID;
1142 } else {
1143 ok = false;
1144 state.error << "emdi12.MarketSegmentGrp1.MarketSegmentID: copy operator: previous value unassigned" << eol;
1145 }
1146 MarketSegmentID_SetAssigned(state);
1147 state.MarketSegmentID = parent.MarketSegmentID;
1148 }
1149 // ImpliedMarketIndicator type none mandatory
1150 if (ok) {
1151 ok = lib_fast::DecodeUnsigned(from,parent.ImpliedMarketIndicator.value,false);
1152 if (!ok) {
1153 state.error << "emdi12.MarketSegmentGrp1.ImpliedMarketIndicator: bad Unsigned" << eol;
1154 }
1155 }
1156 return ok;
1157}
1158
1159// --- emdi12.MarketSegmentGrp1..FixEncode
1160void emdi12::MarketSegmentGrp1_FixEncode(cstring& buf, emdi12::MarketSegmentGrp1& parent, char soh) {
1161 buf << "1300=" << parent.MarketSegmentID << soh;
1162 buf << "1144=" << parent.ImpliedMarketIndicator << soh;
1163}
1164
1165// --- emdi12.LegSecurityType.value.ToCstr
1166// Convert numeric value of field to one of predefined string constants.
1167// If string is found, return a static C string. Otherwise, return NULL.
1168const char* emdi12::value_ToCstr(const emdi12::LegSecurityType& parent) {
1169 const char *ret = NULL;
1170 switch(value_GetEnum(parent)) {
1171 case emdi12_LegSecurityType_MLEG : ret = "MLEG"; break;
1172 case emdi12_LegSecurityType_ULEG : ret = "ULEG"; break;
1173 }
1174 return ret;
1175}
1176
1177// --- emdi12.LegSecurityType.value.Print
1178// Convert value to a string. First, attempt conversion to a known string.
1179// If no string matches, print value as a numeric value.
1180void emdi12::value_Print(const emdi12::LegSecurityType& parent, algo::cstring &lhs) {
1181 const char *strval = value_ToCstr(parent);
1182 if (strval) {
1183 lhs << strval;
1184 } else {
1185 lhs << parent.value;
1186 }
1187}
1188
1189// --- emdi12.LegSecurityType.value.SetStrptrMaybe
1190// Convert string to field.
1191// If the string is invalid, do not modify field and return false.
1192// In case of success, return true
1193bool emdi12::value_SetStrptrMaybe(emdi12::LegSecurityType& parent, algo::strptr rhs) {
1194 bool ret = false;
1195 switch (elems_N(rhs)) {
1196 case 4: {
1197 switch (u64(algo::ReadLE32(rhs.elems))) {
1198 case LE_STR4('M','L','E','G'): {
1199 value_SetEnum(parent,emdi12_LegSecurityType_MLEG); ret = true; break;
1200 }
1201 case LE_STR4('U','L','E','G'): {
1202 value_SetEnum(parent,emdi12_LegSecurityType_ULEG); ret = true; break;
1203 }
1204 }
1205 break;
1206 }
1207 }
1208 return ret;
1209}
1210
1211// --- emdi12.LegSecurityType.value.SetStrptr
1212// Convert string to field.
1213// If the string is invalid, set numeric value to DFLT
1214void emdi12::value_SetStrptr(emdi12::LegSecurityType& parent, algo::strptr rhs, emdi12_LegSecurityTypeEnum dflt) {
1215 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
1216}
1217
1218// --- emdi12.LegSecurityType.value.ReadStrptrMaybe
1219// Convert string to field. Return success value
1220bool emdi12::value_ReadStrptrMaybe(emdi12::LegSecurityType& parent, algo::strptr rhs) {
1221 bool retval = false;
1222 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
1223 if (!retval) { // didn't work? try reading as underlying type
1224 retval = u32_ReadStrptrMaybe(parent.value,rhs);
1225 }
1226 return retval;
1227}
1228
1229// --- emdi12.LegSecurityType..ReadStrptrMaybe
1230// Read fields of emdi12::LegSecurityType from an ascii string.
1231// The format of the string is the format of the emdi12::LegSecurityType's only field
1232bool emdi12::LegSecurityType_ReadStrptrMaybe(emdi12::LegSecurityType &parent, algo::strptr in_str) {
1233 bool retval = true;
1234 retval = retval && value_ReadStrptrMaybe(parent, in_str);
1235 return retval;
1236}
1237
1238// --- emdi12.LegSecurityType..Print
1239// print string representation of ROW to string STR
1240// cfmt:emdi12.LegSecurityType.String printfmt:Raw
1241void emdi12::LegSecurityType_Print(emdi12::LegSecurityType row, algo::cstring& str) {
1242 emdi12::value_Print(row, str);
1243}
1244
1245// --- emdi12.Side.value.ToCstr
1246// Convert numeric value of field to one of predefined string constants.
1247// If string is found, return a static C string. Otherwise, return NULL.
1248const char* emdi12::value_ToCstr(const emdi12::Side& parent) {
1249 const char *ret = NULL;
1250 switch(value_GetEnum(parent)) {
1251 case emdi12_Side_1 : ret = "1"; break;
1252 case emdi12_Side_2 : ret = "2"; break;
1253 }
1254 return ret;
1255}
1256
1257// --- emdi12.Side.value.Print
1258// Convert value to a string. First, attempt conversion to a known string.
1259// If no string matches, print value as a numeric value.
1260void emdi12::value_Print(const emdi12::Side& parent, algo::cstring &lhs) {
1261 const char *strval = value_ToCstr(parent);
1262 if (strval) {
1263 lhs << strval;
1264 } else {
1265 lhs << parent.value;
1266 }
1267}
1268
1269// --- emdi12.Side.value.SetStrptrMaybe
1270// Convert string to field.
1271// If the string is invalid, do not modify field and return false.
1272// In case of success, return true
1273bool emdi12::value_SetStrptrMaybe(emdi12::Side& parent, algo::strptr rhs) {
1274 bool ret = false;
1275 switch (elems_N(rhs)) {
1276 case 1: {
1277 switch (u64(rhs[0])) {
1278 case '1': {
1279 value_SetEnum(parent,emdi12_Side_1); ret = true; break;
1280 }
1281 case '2': {
1282 value_SetEnum(parent,emdi12_Side_2); ret = true; break;
1283 }
1284 }
1285 break;
1286 }
1287 }
1288 return ret;
1289}
1290
1291// --- emdi12.Side.value.SetStrptr
1292// Convert string to field.
1293// If the string is invalid, set numeric value to DFLT
1294void emdi12::value_SetStrptr(emdi12::Side& parent, algo::strptr rhs, emdi12_SideEnum dflt) {
1295 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
1296}
1297
1298// --- emdi12.Side.value.ReadStrptrMaybe
1299// Convert string to field. Return success value
1300bool emdi12::value_ReadStrptrMaybe(emdi12::Side& parent, algo::strptr rhs) {
1301 bool retval = false;
1302 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
1303 if (!retval) { // didn't work? try reading as underlying type
1304 retval = u32_ReadStrptrMaybe(parent.value,rhs);
1305 }
1306 return retval;
1307}
1308
1309// --- emdi12.Side..ReadStrptrMaybe
1310// Read fields of emdi12::Side from an ascii string.
1311// The format of the string is the format of the emdi12::Side's only field
1312bool emdi12::Side_ReadStrptrMaybe(emdi12::Side &parent, algo::strptr in_str) {
1313 bool retval = true;
1314 retval = retval && value_ReadStrptrMaybe(parent, in_str);
1315 return retval;
1316}
1317
1318// --- emdi12.Side..Print
1319// print string representation of ROW to string STR
1320// cfmt:emdi12.Side.String printfmt:Raw
1321void emdi12::Side_Print(emdi12::Side row, algo::cstring& str) {
1322 emdi12::value_Print(row, str);
1323}
1324
1325// --- emdi12.InstrmtLegGrp.LegSymbol.ReadStrptrMaybe
1326inline static bool emdi12::LegSymbol_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
1327 bool retval = true;
1328 retval = u32_ReadStrptrMaybe(parent.LegSymbol, in_str);
1329 return retval;
1330}
1331
1332// --- emdi12.InstrmtLegGrp.LegSecurityID.ReadStrptrMaybe
1333inline static bool emdi12::LegSecurityID_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
1334 bool retval = true;
1335 retval = i64_ReadStrptrMaybe(parent.LegSecurityID, in_str);
1336 return retval;
1337}
1338
1339// --- emdi12.InstrmtLegGrp.LegSecurityType.ReadStrptrMaybe
1340inline static bool emdi12::LegSecurityType_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
1341 bool retval = true;
1342 retval = emdi12::LegSecurityType_ReadStrptrMaybe(parent.LegSecurityType, in_str);
1343 return retval;
1344}
1345
1346// --- emdi12.InstrmtLegGrp.LegRatioQty.ReadStrptrMaybe
1347inline static bool emdi12::LegRatioQty_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
1348 bool retval = true;
1349 retval = u32_ReadStrptrMaybe(parent.LegRatioQty, in_str);
1350 return retval;
1351}
1352
1353// --- emdi12.InstrmtLegGrp.LegSide.ReadStrptrMaybe
1354inline static bool emdi12::LegSide_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
1355 bool retval = true;
1356 retval = emdi12::Side_ReadStrptrMaybe(parent.LegSide, in_str);
1357 return retval;
1358}
1359
1360// --- emdi12.InstrmtLegGrp.LegPrice.ReadStrptrMaybe
1361inline static bool emdi12::LegPrice_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
1362 bool retval = true;
1363 algo::Decimal LegPrice_tmp;
1364 retval = algo::Decimal_ReadStrptrMaybe(LegPrice_tmp, in_str);
1365 if (retval) {
1366 LegPrice_Set(parent, LegPrice_tmp);
1367 }
1368 return retval;
1369}
1370
1371// --- emdi12.InstrmtLegGrp.pmask_bitcurs.Next
1372// proceed to next item
1373void emdi12::InstrmtLegGrp_pmask_bitcurs_Next(InstrmtLegGrp_pmask_bitcurs &curs) {
1374 ++curs.bit;
1375 int index = curs.bit / 32;
1376 int offset = curs.bit % 32;
1377 for (; index < curs.n_elems; ++index, offset = 0) {
1378 u64 rest = curs.elems[index] >> offset;
1379 if (rest) {
1380 offset += algo::u64_BitScanForward(rest);
1381 break;
1382 }
1383 }
1384 curs.bit = index * 32 + offset;
1385}
1386
1387// --- emdi12.InstrmtLegGrp..ReadFieldMaybe
1388bool emdi12::InstrmtLegGrp_ReadFieldMaybe(emdi12::InstrmtLegGrp& parent, algo::strptr field, algo::strptr strval) {
1389 bool retval = true;
1390 emdi12::FieldId field_id;
1391 (void)value_SetStrptrMaybe(field_id,field);
1392 switch(field_id) {
1393 case emdi12_FieldId_pmask: {
1394 retval = false;
1395 break;
1396 }
1397 case emdi12_FieldId_LegSymbol: {
1398 retval = LegSymbol_ReadStrptrMaybe(parent, strval);
1399 break;
1400 }
1401 case emdi12_FieldId_LegSecurityID: {
1402 retval = LegSecurityID_ReadStrptrMaybe(parent, strval);
1403 break;
1404 }
1405 case emdi12_FieldId_LegSecurityIDSource: {
1406 retval = true;
1407 break;
1408 }
1409 case emdi12_FieldId_LegSecurityType: {
1410 retval = LegSecurityType_ReadStrptrMaybe(parent, strval);
1411 break;
1412 }
1413 case emdi12_FieldId_LegRatioQty: {
1414 retval = LegRatioQty_ReadStrptrMaybe(parent, strval);
1415 break;
1416 }
1417 case emdi12_FieldId_LegSide: {
1418 retval = LegSide_ReadStrptrMaybe(parent, strval);
1419 break;
1420 }
1421 case emdi12_FieldId_LegPrice: {
1422 retval = LegPrice_ReadStrptrMaybe(parent, strval);
1423 if (retval) {
1424 pmask_qSetBit(parent, 0);
1425 }
1426 break;
1427 }
1428 default: break;
1429 }
1430 if (!retval) {
1431 algo_lib::AppendErrtext("attr",field);
1432 }
1433 return retval;
1434}
1435
1436// --- emdi12.InstrmtLegGrp..ReadStrptrMaybe
1437// Read fields of emdi12::InstrmtLegGrp from an ascii string.
1438// The format of the string is an ssim Tuple
1439bool emdi12::InstrmtLegGrp_ReadStrptrMaybe(emdi12::InstrmtLegGrp &parent, algo::strptr in_str) {
1440 bool retval = true;
1441 retval = algo::StripTypeTag(in_str, "emdi12.InstrmtLegGrp");
1442 ind_beg(algo::Attr_curs, attr, in_str) {
1443 retval = retval && InstrmtLegGrp_ReadFieldMaybe(parent, attr.name, attr.value);
1444 }ind_end;
1445 return retval;
1446}
1447
1448// --- emdi12.InstrmtLegGrp..Print
1449// print string representation of ROW to string STR
1450// cfmt:emdi12.InstrmtLegGrp.String printfmt:Tuple
1451void emdi12::InstrmtLegGrp_Print(emdi12::InstrmtLegGrp& row, algo::cstring& str) {
1452 algo::tempstr temp;
1453 str << "emdi12.InstrmtLegGrp";
1454
1455 u32_Print(row.LegSymbol, temp);
1456 PrintAttrSpaceReset(str,"LegSymbol", temp);
1457
1458 i64_Print(row.LegSecurityID, temp);
1459 PrintAttrSpaceReset(str,"LegSecurityID", temp);
1460
1461 algo::strptr_Print(LegSecurityIDSource_Get(row), temp);
1462 PrintAttrSpaceReset(str,"LegSecurityIDSource", temp);
1463
1464 emdi12::LegSecurityType_Print(row.LegSecurityType, temp);
1465 PrintAttrSpaceReset(str,"LegSecurityType", temp);
1466
1467 u32_Print(row.LegRatioQty, temp);
1468 PrintAttrSpaceReset(str,"LegRatioQty", temp);
1469
1470 emdi12::Side_Print(row.LegSide, temp);
1471 PrintAttrSpaceReset(str,"LegSide", temp);
1472
1473 if (LegPrice_PresentQ(row)) {
1474 algo::Decimal_Print(row.LegPrice, temp);
1475 PrintAttrSpaceReset(str,"LegPrice", temp);
1476 }
1477}
1478
1479// --- emdi12.InstrmtLegGrp..FastEncode
1480void emdi12::InstrmtLegGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::InstrmtLegGrp& parent) {
1481 int index = ary_N(buf);
1482 u64 pmap(0);
1483 // LegSymbol unsigned copy mandatory
1484 if (!LegSymbol_AssignedQ(state) || parent.LegSymbol != state.LegSymbol) {
1485 lib_fast::EncodeUnsigned(buf,parent.LegSymbol,false);
1486 lib_fast::SetPmapBit(pmap,0);
1487 }
1488 state.LegSymbol = parent.LegSymbol;
1489 LegSymbol_SetAssigned(state);
1490 // LegSecurityID signed none mandatory
1491 lib_fast::EncodeSigned(buf,parent.LegSecurityID,false);
1492 // LegSecurityIDSource string constant mandatory
1493 // LegSecurityType type default mandatory
1494 if (parent.LegSecurityType.value != 0) {
1495 lib_fast::EncodeUnsigned(buf,parent.LegSecurityType.value,false);
1496 lib_fast::SetPmapBit(pmap,1);
1497 }
1498 // LegRatioQty unsigned none mandatory
1499 lib_fast::EncodeUnsigned(buf,parent.LegRatioQty,false);
1500 // LegSide type copy mandatory
1501 if (!LegSide_AssignedQ(state) || parent.LegSide.value != state.LegSide.value) {
1502 lib_fast::EncodeUnsigned(buf,parent.LegSide.value,false);
1503 lib_fast::SetPmapBit(pmap,2);
1504 }
1505 state.LegSide.value = parent.LegSide.value;
1506 LegSide_SetAssigned(state);
1507 // LegPrice scaled none optional
1508 if (LegPrice_PresentQ(parent)) {
1509 lib_fast::EncodeScaled(buf,parent.LegPrice,true);
1510 } else {
1511 lib_fast::EncodeNull(buf);
1512 }
1513 lib_fast::InsertPmap(buf,index,pmap);
1514}
1515
1516// --- emdi12.InstrmtLegGrp..FastDecode
1517bool emdi12::InstrmtLegGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::InstrmtLegGrp& parent) {
1518 bool ok = true;
1519 u64 pmap;
1520 ok = lib_fast::DecodePmap(from,pmap);
1521 if (!ok) {
1522 state.error << "emdi12.InstrmtLegGrp: bad pmap" << eol;
1523 }
1524 // LegSymbol unsigned copy mandatory
1525 if (ok) {
1526 bool prs = lib_fast::GetPmapBit(pmap,0);
1527 if (prs) {
1528 ok = lib_fast::DecodeUnsigned(from,parent.LegSymbol,false);
1529 if (!ok) {
1530 state.error << "emdi12.InstrmtLegGrp.LegSymbol: bad Unsigned" << eol;
1531 }
1532 } else if (LegSymbol_AssignedQ(state)) {
1533 parent.LegSymbol = state.LegSymbol;
1534 } else {
1535 ok = false;
1536 state.error << "emdi12.InstrmtLegGrp.LegSymbol: copy operator: previous value unassigned" << eol;
1537 }
1538 LegSymbol_SetAssigned(state);
1539 state.LegSymbol = parent.LegSymbol;
1540 }
1541 // LegSecurityID signed none mandatory
1542 if (ok) {
1543 ok = lib_fast::DecodeSigned(from,parent.LegSecurityID,false);
1544 if (!ok) {
1545 state.error << "emdi12.InstrmtLegGrp.LegSecurityID: bad Signed" << eol;
1546 }
1547 }
1548 // LegSecurityIDSource string constant mandatory
1549 if (ok) {
1550 }
1551 // LegSecurityType type default mandatory
1552 if (ok) {
1553 bool prs = lib_fast::GetPmapBit(pmap,1);
1554 if (prs) {
1555 ok = lib_fast::DecodeUnsigned(from,parent.LegSecurityType.value,false);
1556 if (!ok) {
1557 state.error << "emdi12.InstrmtLegGrp.LegSecurityType: bad Unsigned" << eol;
1558 }
1559 } else {
1560 parent.LegSecurityType.value = 0;
1561 }
1562 }
1563 // LegRatioQty unsigned none mandatory
1564 if (ok) {
1565 ok = lib_fast::DecodeUnsigned(from,parent.LegRatioQty,false);
1566 if (!ok) {
1567 state.error << "emdi12.InstrmtLegGrp.LegRatioQty: bad Unsigned" << eol;
1568 }
1569 }
1570 // LegSide type copy mandatory
1571 if (ok) {
1572 bool prs = lib_fast::GetPmapBit(pmap,2);
1573 if (prs) {
1574 ok = lib_fast::DecodeUnsigned(from,parent.LegSide.value,false);
1575 if (!ok) {
1576 state.error << "emdi12.InstrmtLegGrp.LegSide: bad Unsigned" << eol;
1577 }
1578 } else if (LegSide_AssignedQ(state)) {
1579 parent.LegSide.value = state.LegSide.value;
1580 } else {
1581 ok = false;
1582 state.error << "emdi12.InstrmtLegGrp.LegSide: copy operator: previous value unassigned" << eol;
1583 }
1584 LegSide_SetAssigned(state);
1585 state.LegSide.value = parent.LegSide.value;
1586 }
1587 // LegPrice scaled none optional
1588 if (ok) {
1589 bool prs = !lib_fast::DecodeNull(from);
1590 if (prs) {
1591 ok = lib_fast::DecodeScaled(from,parent.LegPrice,true);
1592 if (!ok) {
1593 state.error << "emdi12.InstrmtLegGrp.LegPrice: bad Scaled" << eol;
1594 }
1595 }
1596 pmask_qSetBitVal(parent,LegPrice_Present_GetBit(parent),prs);
1597 }
1598 return ok;
1599}
1600
1601// --- emdi12.InstrmtLegGrp..FixEncode
1602void emdi12::InstrmtLegGrp_FixEncode(cstring& buf, emdi12::InstrmtLegGrp& parent, char soh) {
1603 buf << "600=" << parent.LegSymbol << soh;
1604 buf << "602=" << parent.LegSecurityID << soh;
1605 buf << "603=" << LegSecurityIDSource_Get(parent) << soh;
1606 buf << "609=" << parent.LegSecurityType << soh;
1607 buf << "623=" << parent.LegRatioQty << soh;
1608 buf << "624=" << parent.LegSide << soh;
1609 if (LegPrice_PresentQ(parent)) {
1610 buf << "566=" << parent.LegPrice << soh;
1611 }
1612}
1613
1614// --- emdi12.ComplexInstrumentUpdate.base.CopyOut
1615// Copy fields out of row
1616void emdi12::parent_CopyOut(emdi12::ComplexInstrumentUpdate &row, emdi12::TemplateHeader &out) {
1617 // length: field value is computed
1618 // id: field value is computed
1619 (void)row;//only to avoid -Wunused-parameter
1620 (void)out;//only to avoid -Wunused-parameter
1621}
1622
1623// --- emdi12.ComplexInstrumentUpdate.MsgSeqNum.ReadStrptrMaybe
1624inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1625 bool retval = true;
1626 retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
1627 return retval;
1628}
1629
1630// --- emdi12.ComplexInstrumentUpdate.SenderCompID.ReadStrptrMaybe
1631inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1632 bool retval = true;
1633 retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
1634 return retval;
1635}
1636
1637// --- emdi12.ComplexInstrumentUpdate.SecurityID.ReadStrptrMaybe
1638inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1639 bool retval = true;
1640 retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
1641 return retval;
1642}
1643
1644// --- emdi12.ComplexInstrumentUpdate.SecurityDesc.ReadStrptrMaybe
1645inline static bool emdi12::SecurityDesc_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1646 bool retval = true;
1647 retval = algo::Smallstr30_ReadStrptrMaybe(parent.SecurityDesc, in_str);
1648 return retval;
1649}
1650
1651// --- emdi12.ComplexInstrumentUpdate.SecuritySubType.ReadStrptrMaybe
1652inline static bool emdi12::SecuritySubType_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1653 bool retval = true;
1654 u32 SecuritySubType_tmp;
1655 retval = u32_ReadStrptrMaybe(SecuritySubType_tmp, in_str);
1656 if (retval) {
1657 SecuritySubType_Set(parent, SecuritySubType_tmp);
1658 }
1659 return retval;
1660}
1661
1662// --- emdi12.ComplexInstrumentUpdate.ProductComplex.ReadStrptrMaybe
1663inline static bool emdi12::ProductComplex_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1664 bool retval = true;
1665 retval = emdi12::ProductComplex_ReadStrptrMaybe(parent.ProductComplex, in_str);
1666 return retval;
1667}
1668
1669// --- emdi12.ComplexInstrumentUpdate.LegRatioMultiplier.ReadStrptrMaybe
1670inline static bool emdi12::LegRatioMultiplier_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1671 bool retval = true;
1672 u32 LegRatioMultiplier_tmp;
1673 retval = u32_ReadStrptrMaybe(LegRatioMultiplier_tmp, in_str);
1674 if (retval) {
1675 LegRatioMultiplier_Set(parent, LegRatioMultiplier_tmp);
1676 }
1677 return retval;
1678}
1679
1680// --- emdi12.ComplexInstrumentUpdate.QuantityScalingFactor.ReadStrptrMaybe
1681inline static bool emdi12::QuantityScalingFactor_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1682 bool retval = true;
1683 u32 QuantityScalingFactor_tmp;
1684 retval = u32_ReadStrptrMaybe(QuantityScalingFactor_tmp, in_str);
1685 if (retval) {
1686 QuantityScalingFactor_Set(parent, QuantityScalingFactor_tmp);
1687 }
1688 return retval;
1689}
1690
1691// --- emdi12.ComplexInstrumentUpdate.LastFragment.ReadStrptrMaybe
1692inline static bool emdi12::LastFragment_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1693 bool retval = true;
1694 retval = emdi12::LastFragment_ReadStrptrMaybe(parent.LastFragment, in_str);
1695 return retval;
1696}
1697
1698// --- emdi12.ComplexInstrumentUpdate.MarketSegmentGrp1.ReadStrptrMaybe
1699inline static bool emdi12::MarketSegmentGrp1_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1700 bool retval = true;
1701 retval = emdi12::MarketSegmentGrp1_ReadStrptrMaybe(parent.MarketSegmentGrp1, in_str);
1702 return retval;
1703}
1704
1705// --- emdi12.ComplexInstrumentUpdate.TransactTime.ReadStrptrMaybe
1706inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1707 bool retval = true;
1708 retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
1709 return retval;
1710}
1711
1712// --- emdi12.ComplexInstrumentUpdate.InstrmtLegGrp.Getary
1713// Access var-length portion as an aryptr. Length is determined from one of the fields.
1714algo::aryptr<emdi12::InstrmtLegGrp> emdi12::InstrmtLegGrp_Getary(emdi12::ComplexInstrumentUpdate& parent) {
1715 return algo::aryptr<emdi12::InstrmtLegGrp>(InstrmtLegGrp_Addr(parent), InstrmtLegGrp_N(parent));
1716}
1717
1718// --- emdi12.ComplexInstrumentUpdate.InstrmtLegGrp.Addr
1719emdi12::InstrmtLegGrp* emdi12::InstrmtLegGrp_Addr(emdi12::ComplexInstrumentUpdate& parent) {
1720 return (emdi12::InstrmtLegGrp*)((u8*)&parent + sizeof(emdi12::ComplexInstrumentUpdate)); // address of varlen portion
1721}
1722
1723// --- emdi12.ComplexInstrumentUpdate.InstrmtLegGrp.ReadStrptrMaybe
1724// Convert string to field. Return success value
1725bool emdi12::InstrmtLegGrp_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate& parent, algo::strptr in_str) {
1726 bool retval = true;
1727 if (algo_lib::_db.varlenbuf) {
1728 emdi12::InstrmtLegGrp *InstrmtLegGrp_tmp = new(ary_AllocN(*algo_lib::_db.varlenbuf, sizeof(emdi12::InstrmtLegGrp)).elems) emdi12::InstrmtLegGrp;
1729 retval = emdi12::InstrmtLegGrp_ReadStrptrMaybe(*InstrmtLegGrp_tmp, in_str);
1730 }
1731 (void)parent;//only to avoid -Wunused-parameter
1732 return retval;
1733}
1734
1735// --- emdi12.ComplexInstrumentUpdate.pmask_bitcurs.Next
1736// proceed to next item
1737void emdi12::ComplexInstrumentUpdate_pmask_bitcurs_Next(ComplexInstrumentUpdate_pmask_bitcurs &curs) {
1738 ++curs.bit;
1739 int index = curs.bit / 32;
1740 int offset = curs.bit % 32;
1741 for (; index < curs.n_elems; ++index, offset = 0) {
1742 u64 rest = curs.elems[index] >> offset;
1743 if (rest) {
1744 offset += algo::u64_BitScanForward(rest);
1745 break;
1746 }
1747 }
1748 curs.bit = index * 32 + offset;
1749}
1750
1751// --- emdi12.ComplexInstrumentUpdate..ReadFieldMaybe
1752bool emdi12::ComplexInstrumentUpdate_ReadFieldMaybe(emdi12::ComplexInstrumentUpdate& parent, algo::strptr field, algo::strptr strval) {
1753 bool retval = true;
1754 emdi12::FieldId field_id;
1755 (void)value_SetStrptrMaybe(field_id,algo::Pathcomp(field, ".LL"));
1756 switch(field_id) {
1757 case emdi12_FieldId_base: {
1758 retval = false;
1759 break;
1760 }
1761 case emdi12_FieldId_length: {
1762 retval = false;
1763 break;
1764 }
1765 case emdi12_FieldId_id: {
1766 retval = false;
1767 break;
1768 }
1769 case emdi12_FieldId_pmask: {
1770 retval = false;
1771 break;
1772 }
1773 case emdi12_FieldId_MsgType: {
1774 retval = true;
1775 break;
1776 }
1777 case emdi12_FieldId_MsgSeqNum: {
1778 retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
1779 break;
1780 }
1781 case emdi12_FieldId_SenderCompID: {
1782 retval = SenderCompID_ReadStrptrMaybe(parent, strval);
1783 break;
1784 }
1785 case emdi12_FieldId_SecurityUpdateAction: {
1786 retval = true;
1787 break;
1788 }
1789 case emdi12_FieldId_SecurityID: {
1790 retval = SecurityID_ReadStrptrMaybe(parent, strval);
1791 break;
1792 }
1793 case emdi12_FieldId_SecurityIDSource: {
1794 retval = true;
1795 break;
1796 }
1797 case emdi12_FieldId_SecurityDesc: {
1798 retval = SecurityDesc_ReadStrptrMaybe(parent, strval);
1799 break;
1800 }
1801 case emdi12_FieldId_SecurityType: {
1802 retval = true;
1803 break;
1804 }
1805 case emdi12_FieldId_SecuritySubType: {
1806 retval = SecuritySubType_ReadStrptrMaybe(parent, strval);
1807 if (retval) {
1808 pmask_qSetBit(parent, 2);
1809 }
1810 break;
1811 }
1812 case emdi12_FieldId_ProductComplex: {
1813 retval = ProductComplex_ReadStrptrMaybe(parent, strval);
1814 break;
1815 }
1816 case emdi12_FieldId_LegRatioMultiplier: {
1817 retval = LegRatioMultiplier_ReadStrptrMaybe(parent, strval);
1818 if (retval) {
1819 pmask_qSetBit(parent, 0);
1820 }
1821 break;
1822 }
1823 case emdi12_FieldId_QuantityScalingFactor: {
1824 retval = QuantityScalingFactor_ReadStrptrMaybe(parent, strval);
1825 if (retval) {
1826 pmask_qSetBit(parent, 1);
1827 }
1828 break;
1829 }
1830 case emdi12_FieldId_LastFragment: {
1831 retval = LastFragment_ReadStrptrMaybe(parent, strval);
1832 break;
1833 }
1834 case emdi12_FieldId_MarketSegmentGrp1: {
1835 retval = MarketSegmentGrp1_ReadStrptrMaybe(parent, strval);
1836 break;
1837 }
1838 case emdi12_FieldId_TransactTime: {
1839 retval = TransactTime_ReadStrptrMaybe(parent, strval);
1840 break;
1841 }
1842 case emdi12_FieldId_InstrmtLegGrp: {
1843 retval = InstrmtLegGrp_ReadStrptrMaybe(parent, strval);
1844 break;
1845 }
1846 default: break;
1847 }
1848 if (!retval) {
1849 algo_lib::AppendErrtext("attr",field);
1850 }
1851 return retval;
1852}
1853
1854// --- emdi12.ComplexInstrumentUpdate..ReadStrptrMaybe
1855// Any varlen fields are returned in algo_lib::_db.varlenbuf if set
1856// Read fields of emdi12::ComplexInstrumentUpdate from an ascii string.
1857// The format of the string is an ssim Tuple
1858bool emdi12::ComplexInstrumentUpdate_ReadStrptrMaybe(emdi12::ComplexInstrumentUpdate &parent, algo::strptr in_str) {
1859 bool retval = true;
1860 retval = algo::StripTypeTag(in_str, "emdi12.ComplexInstrumentUpdate");
1861 ind_beg(algo::Attr_curs, attr, in_str) {
1862 retval = retval && ComplexInstrumentUpdate_ReadFieldMaybe(parent, attr.name, attr.value);
1863 }ind_end;
1864 return retval;
1865}
1866
1867// --- emdi12.ComplexInstrumentUpdate..Init
1868// Set all fields to initial values.
1869void emdi12::ComplexInstrumentUpdate_Init(emdi12::ComplexInstrumentUpdate& parent) {
1870 parent.length = u32(ssizeof(parent) + (0));
1871 parent.id = u32(124);
1872 parent.pmask = u32(0);
1873 parent.MsgSeqNum = u32(0);
1874 parent.SenderCompID = u32(0);
1875 parent.SecurityID = i64(0);
1876 parent.SecuritySubType = u32(0);
1877 parent.LegRatioMultiplier = u32(0);
1878 parent.QuantityScalingFactor = u32(0);
1879 parent.LastFragment = emdi12_LastFragmentEnum(1);
1880 parent.TransactTime = i64(0);
1881}
1882
1883// --- emdi12.ComplexInstrumentUpdate..Print
1884// print string representation of ROW to string STR
1885// cfmt:emdi12.ComplexInstrumentUpdate.String printfmt:Tuple
1886void emdi12::ComplexInstrumentUpdate_Print(emdi12::ComplexInstrumentUpdate& row, algo::cstring& str) {
1887 algo::tempstr temp;
1888 str << "emdi12.ComplexInstrumentUpdate";
1889
1890 algo::strptr_Print(MsgType_Get(row), temp);
1891 PrintAttrSpaceReset(str,"MsgType", temp);
1892
1893 u32_Print(row.MsgSeqNum, temp);
1894 PrintAttrSpaceReset(str,"MsgSeqNum", temp);
1895
1896 u32_Print(row.SenderCompID, temp);
1897 PrintAttrSpaceReset(str,"SenderCompID", temp);
1898
1899 algo::strptr_Print(SecurityUpdateAction_Get(row), temp);
1900 PrintAttrSpaceReset(str,"SecurityUpdateAction", temp);
1901
1902 i64_Print(row.SecurityID, temp);
1903 PrintAttrSpaceReset(str,"SecurityID", temp);
1904
1905 algo::strptr_Print(SecurityIDSource_Get(row), temp);
1906 PrintAttrSpaceReset(str,"SecurityIDSource", temp);
1907
1908 algo::Smallstr30_Print(row.SecurityDesc, temp);
1909 PrintAttrSpaceReset(str,"SecurityDesc", temp);
1910
1911 emdi12::SecurityType_Print(SecurityType_Get(row), temp);
1912 PrintAttrSpaceReset(str,"SecurityType", temp);
1913
1914 if (SecuritySubType_PresentQ(row)) {
1915 u32_Print(row.SecuritySubType, temp);
1916 PrintAttrSpaceReset(str,"SecuritySubType", temp);
1917 }
1918
1919 emdi12::ProductComplex_Print(row.ProductComplex, temp);
1920 PrintAttrSpaceReset(str,"ProductComplex", temp);
1921
1922 if (LegRatioMultiplier_PresentQ(row)) {
1923 u32_Print(row.LegRatioMultiplier, temp);
1924 PrintAttrSpaceReset(str,"LegRatioMultiplier", temp);
1925 }
1926
1927 if (QuantityScalingFactor_PresentQ(row)) {
1928 u32_Print(row.QuantityScalingFactor, temp);
1929 PrintAttrSpaceReset(str,"QuantityScalingFactor", temp);
1930 }
1931
1932 emdi12::LastFragment_Print(row.LastFragment, temp);
1933 PrintAttrSpaceReset(str,"LastFragment", temp);
1934
1935 emdi12::MarketSegmentGrp1_Print(row.MarketSegmentGrp1, temp);
1936 PrintAttrSpaceReset(str,"MarketSegmentGrp1", temp);
1937
1938 i64_Print(row.TransactTime, temp);
1939 PrintAttrSpaceReset(str,"TransactTime", temp);
1940
1941 ind_beg(ComplexInstrumentUpdate_InstrmtLegGrp_curs,InstrmtLegGrp,row) {
1942 emdi12::InstrmtLegGrp_Print(InstrmtLegGrp, temp);
1943 tempstr name;
1944 name << "InstrmtLegGrp.";
1945 name << ind_curs(InstrmtLegGrp).index;
1946 PrintAttrSpaceReset(str, name, temp);
1947 }ind_end;
1948}
1949
1950// --- emdi12.ComplexInstrumentUpdate..FastEncode
1951void emdi12::ComplexInstrumentUpdate_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::ComplexInstrumentUpdate& parent) {
1952 int index = ary_N(buf);
1953 u64 pmap(0);
1954 if (!tid_AssignedQ(state) || parent.id != state.tid) {
1955 lib_fast::EncodeUnsigned(buf,parent.id,false);
1956 lib_fast::SetPmapBit(pmap,0);
1957 }
1958 tid_SetAssigned(state);
1959 state.tid = parent.id;
1960 // MsgType string constant mandatory
1961 // MsgSeqNum unsigned increment mandatory
1962 if (MsgSeqNum_AssignedQ(state)) {
1963 if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
1964 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
1965 lib_fast::SetPmapBit(pmap,1);
1966 }
1967 } else {
1968 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
1969 lib_fast::SetPmapBit(pmap,1);
1970 }
1971 state.MsgSeqNum = parent.MsgSeqNum;
1972 MsgSeqNum_SetAssigned(state);
1973 // SenderCompID unsigned copy mandatory
1974 if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
1975 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
1976 lib_fast::SetPmapBit(pmap,2);
1977 }
1978 state.SenderCompID = parent.SenderCompID;
1979 SenderCompID_SetAssigned(state);
1980 // SecurityUpdateAction string constant mandatory
1981 // SecurityID signed none mandatory
1982 lib_fast::EncodeSigned(buf,parent.SecurityID,false);
1983 // SecurityIDSource string constant mandatory
1984 // SecurityDesc string none mandatory
1985 lib_fast::EncodeString(buf,parent.SecurityDesc,false);
1986 // SecurityType type constant mandatory
1987 // SecuritySubType unsigned none optional
1988 if (SecuritySubType_PresentQ(parent)) {
1989 lib_fast::EncodeUnsigned(buf,parent.SecuritySubType,true);
1990 } else {
1991 lib_fast::EncodeNull(buf);
1992 }
1993 // ProductComplex type copy mandatory
1994 if (!ProductComplex_AssignedQ(state) || parent.ProductComplex.value != state.ProductComplex.value) {
1995 lib_fast::EncodeUnsigned(buf,parent.ProductComplex.value,false);
1996 lib_fast::SetPmapBit(pmap,3);
1997 }
1998 state.ProductComplex.value = parent.ProductComplex.value;
1999 ProductComplex_SetAssigned(state);
2000 // LegRatioMultiplier unsigned default optional
2001 if (LegRatioMultiplier_PresentQ(parent)) {
2002 lib_fast::EncodeUnsigned(buf,parent.LegRatioMultiplier,true);
2003 lib_fast::SetPmapBit(pmap,4);
2004 }
2005 // QuantityScalingFactor unsigned none optional
2006 if (QuantityScalingFactor_PresentQ(parent)) {
2007 lib_fast::EncodeUnsigned(buf,parent.QuantityScalingFactor,true);
2008 } else {
2009 lib_fast::EncodeNull(buf);
2010 }
2011 // LastFragment type default mandatory
2012 if (parent.LastFragment.value != 1) {
2013 lib_fast::EncodeUnsigned(buf,parent.LastFragment.value,false);
2014 lib_fast::SetPmapBit(pmap,5);
2015 }
2016 // InstrmtLegGrp sequence none mandatory
2017 {
2018 u32 length = InstrmtLegGrp_N(parent);
2019 lib_fast::EncodeUnsigned(buf,length,false);
2020 ind_beg(ComplexInstrumentUpdate_InstrmtLegGrp_curs,elem,parent) {
2021 InstrmtLegGrp_FastEncode(buf,state,elem);
2022 }ind_end;
2023 }
2024 // MarketSegmentGrp1 sequence none mandatory
2025 MarketSegmentGrp1_FastEncode(buf,state,parent.MarketSegmentGrp1);
2026 // TransactTime signed none mandatory
2027 lib_fast::EncodeSigned(buf,parent.TransactTime,false);
2028 lib_fast::InsertPmap(buf,index,pmap);
2029}
2030
2031// --- emdi12.ComplexInstrumentUpdate..FastDecode
2032bool emdi12::ComplexInstrumentUpdate_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::ComplexInstrumentUpdate& parent) {
2033 bool ok = true;
2034 // MsgType string constant mandatory
2035 if (ok) {
2036 }
2037 // MsgSeqNum unsigned increment mandatory
2038 if (ok) {
2039 bool prs = lib_fast::GetPmapBit(pmap,1);
2040 if (prs) {
2041 ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
2042 if (!ok) {
2043 state.error << "emdi12.ComplexInstrumentUpdate.MsgSeqNum: bad Unsigned" << eol;
2044 }
2045 } else if (MsgSeqNum_AssignedQ(state)) {
2046 parent.MsgSeqNum = state.MsgSeqNum + 1;
2047 } else {
2048 ok = false;
2049 state.error << "emdi12.ComplexInstrumentUpdate.MsgSeqNum: increment operator: previous value unassigned" << eol;
2050 }
2051 MsgSeqNum_SetAssigned(state);
2052 state.MsgSeqNum = parent.MsgSeqNum;
2053 }
2054 // SenderCompID unsigned copy mandatory
2055 if (ok) {
2056 bool prs = lib_fast::GetPmapBit(pmap,2);
2057 if (prs) {
2058 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
2059 if (!ok) {
2060 state.error << "emdi12.ComplexInstrumentUpdate.SenderCompID: bad Unsigned" << eol;
2061 }
2062 } else if (SenderCompID_AssignedQ(state)) {
2063 parent.SenderCompID = state.SenderCompID;
2064 } else {
2065 ok = false;
2066 state.error << "emdi12.ComplexInstrumentUpdate.SenderCompID: copy operator: previous value unassigned" << eol;
2067 }
2068 SenderCompID_SetAssigned(state);
2069 state.SenderCompID = parent.SenderCompID;
2070 }
2071 // SecurityUpdateAction string constant mandatory
2072 if (ok) {
2073 }
2074 // SecurityID signed none mandatory
2075 if (ok) {
2076 ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
2077 if (!ok) {
2078 state.error << "emdi12.ComplexInstrumentUpdate.SecurityID: bad Signed" << eol;
2079 }
2080 }
2081 // SecurityIDSource string constant mandatory
2082 if (ok) {
2083 }
2084 // SecurityDesc string none mandatory
2085 if (ok) {
2086 ok = lib_fast::DecodeString(from,parent.SecurityDesc,false);
2087 if (!ok) {
2088 state.error << "emdi12.ComplexInstrumentUpdate.SecurityDesc: bad String" << eol;
2089 }
2090 }
2091 // SecurityType type constant mandatory
2092 if (ok) {
2093 }
2094 // SecuritySubType unsigned none optional
2095 if (ok) {
2096 bool prs = !lib_fast::DecodeNull(from);
2097 if (prs) {
2098 ok = lib_fast::DecodeUnsigned(from,parent.SecuritySubType,true);
2099 if (!ok) {
2100 state.error << "emdi12.ComplexInstrumentUpdate.SecuritySubType: bad Unsigned" << eol;
2101 }
2102 }
2103 pmask_qSetBitVal(parent,SecuritySubType_Present_GetBit(parent),prs);
2104 }
2105 // ProductComplex type copy mandatory
2106 if (ok) {
2107 bool prs = lib_fast::GetPmapBit(pmap,3);
2108 if (prs) {
2109 ok = lib_fast::DecodeUnsigned(from,parent.ProductComplex.value,false);
2110 if (!ok) {
2111 state.error << "emdi12.ComplexInstrumentUpdate.ProductComplex: bad Unsigned" << eol;
2112 }
2113 } else if (ProductComplex_AssignedQ(state)) {
2114 parent.ProductComplex.value = state.ProductComplex.value;
2115 } else {
2116 ok = false;
2117 state.error << "emdi12.ComplexInstrumentUpdate.ProductComplex: copy operator: previous value unassigned" << eol;
2118 }
2119 ProductComplex_SetAssigned(state);
2120 state.ProductComplex.value = parent.ProductComplex.value;
2121 }
2122 // LegRatioMultiplier unsigned default optional
2123 if (ok) {
2124 bool prs = lib_fast::GetPmapBit(pmap,4);
2125 if (prs) {
2126 prs = !lib_fast::DecodeNull(from);
2127 if (prs) {
2128 ok = lib_fast::DecodeUnsigned(from,parent.LegRatioMultiplier,true);
2129 if (!ok) {
2130 state.error << "emdi12.ComplexInstrumentUpdate.LegRatioMultiplier: bad Unsigned" << eol;
2131 }
2132 }
2133 } else {
2134 }
2135 pmask_qSetBitVal(parent,LegRatioMultiplier_Present_GetBit(parent),prs);
2136 }
2137 // QuantityScalingFactor unsigned none optional
2138 if (ok) {
2139 bool prs = !lib_fast::DecodeNull(from);
2140 if (prs) {
2141 ok = lib_fast::DecodeUnsigned(from,parent.QuantityScalingFactor,true);
2142 if (!ok) {
2143 state.error << "emdi12.ComplexInstrumentUpdate.QuantityScalingFactor: bad Unsigned" << eol;
2144 }
2145 }
2146 pmask_qSetBitVal(parent,QuantityScalingFactor_Present_GetBit(parent),prs);
2147 }
2148 // LastFragment type default mandatory
2149 if (ok) {
2150 bool prs = lib_fast::GetPmapBit(pmap,5);
2151 if (prs) {
2152 ok = lib_fast::DecodeUnsigned(from,parent.LastFragment.value,false);
2153 if (!ok) {
2154 state.error << "emdi12.ComplexInstrumentUpdate.LastFragment: bad Unsigned" << eol;
2155 }
2156 } else {
2157 parent.LastFragment.value = 1;
2158 }
2159 }
2160 // InstrmtLegGrp sequence none mandatory
2161 if (ok) {
2162 u32 length(0);
2163 ok = lib_fast::DecodeUnsigned(from,length,false);
2164 if (!ok) {
2165 state.error << "emdi12.ComplexInstrumentUpdate.InstrmtLegGrp: bad Unsigned" << eol;
2166 }
2167 if (!ok) {
2168 state.error << "emdi12.ComplexInstrumentUpdate.InstrmtLegGrp: bad length" << eol;
2169 }
2170 for (unsigned i=0; ok && i<length; ++i) {
2171 InstrmtLegGrp &seq = *new(ary_AllocN(lib_fast::_db.varlen,sizeof seq).elems) InstrmtLegGrp;
2172 ok = InstrmtLegGrp_FastDecode(from,state,seq);
2173 if (!ok) {
2174 state.error << "emdi12.ComplexInstrumentUpdate.InstrmtLegGrp: element #"<< i+1 << eol;
2175 }
2176 }
2177 }
2178 // MarketSegmentGrp1 sequence none mandatory
2179 if (ok) {
2180 ok = MarketSegmentGrp1_FastDecode(from,state,parent.MarketSegmentGrp1);
2181 }
2182 // TransactTime signed none mandatory
2183 if (ok) {
2184 ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
2185 if (!ok) {
2186 state.error << "emdi12.ComplexInstrumentUpdate.TransactTime: bad Signed" << eol;
2187 }
2188 }
2189 return ok;
2190}
2191
2192// --- emdi12.ComplexInstrumentUpdate..FixEncode
2193void emdi12::ComplexInstrumentUpdate_FixEncode(cstring& buf, emdi12::ComplexInstrumentUpdate& parent, char soh) {
2194 buf << "35=" << MsgType_Get(parent) << soh;
2195 buf << "34=" << parent.MsgSeqNum << soh;
2196 buf << "49=" << parent.SenderCompID << soh;
2197 buf << "980=" << SecurityUpdateAction_Get(parent) << soh;
2198 buf << "48=" << parent.SecurityID << soh;
2199 buf << "22=" << SecurityIDSource_Get(parent) << soh;
2200 buf << "107=" << parent.SecurityDesc << soh;
2201 buf << "167=" << SecurityType_Get(parent) << soh;
2202 if (SecuritySubType_PresentQ(parent)) {
2203 buf << "762=" << parent.SecuritySubType << soh;
2204 }
2205 buf << "1227=" << parent.ProductComplex << soh;
2206 if (LegRatioMultiplier_PresentQ(parent)) {
2207 buf << "28900=" << parent.LegRatioMultiplier << soh;
2208 }
2209 if (QuantityScalingFactor_PresentQ(parent)) {
2210 buf << "28907=" << parent.QuantityScalingFactor << soh;
2211 }
2212 buf << "893=" << parent.LastFragment << soh;
2213 {
2214 u32 length = InstrmtLegGrp_N(parent);
2215 if (length) {
2216 buf << "555=" << length << soh;
2217 }
2218 }
2219 ind_beg(ComplexInstrumentUpdate_InstrmtLegGrp_curs,elem,parent) {
2220 InstrmtLegGrp_FixEncode(buf,elem,soh);
2221 }ind_end;
2222 buf << "1310=1" << soh;
2223 buf << "60=" << parent.TransactTime << soh;
2224}
2225
2226// --- emdi12.CrossRequestType.value.ToCstr
2227// Convert numeric value of field to one of predefined string constants.
2228// If string is found, return a static C string. Otherwise, return NULL.
2229const char* emdi12::value_ToCstr(const emdi12::CrossRequestType& parent) {
2230 const char *ret = NULL;
2231 switch(value_GetEnum(parent)) {
2232 case emdi12_CrossRequestType_1 : ret = "1"; break;
2233 case emdi12_CrossRequestType_2 : ret = "2"; break;
2234 }
2235 return ret;
2236}
2237
2238// --- emdi12.CrossRequestType.value.Print
2239// Convert value to a string. First, attempt conversion to a known string.
2240// If no string matches, print value as a numeric value.
2241void emdi12::value_Print(const emdi12::CrossRequestType& parent, algo::cstring &lhs) {
2242 const char *strval = value_ToCstr(parent);
2243 if (strval) {
2244 lhs << strval;
2245 } else {
2246 lhs << parent.value;
2247 }
2248}
2249
2250// --- emdi12.CrossRequestType.value.SetStrptrMaybe
2251// Convert string to field.
2252// If the string is invalid, do not modify field and return false.
2253// In case of success, return true
2254bool emdi12::value_SetStrptrMaybe(emdi12::CrossRequestType& parent, algo::strptr rhs) {
2255 bool ret = false;
2256 switch (elems_N(rhs)) {
2257 case 1: {
2258 switch (u64(rhs[0])) {
2259 case '1': {
2260 value_SetEnum(parent,emdi12_CrossRequestType_1); ret = true; break;
2261 }
2262 case '2': {
2263 value_SetEnum(parent,emdi12_CrossRequestType_2); ret = true; break;
2264 }
2265 }
2266 break;
2267 }
2268 }
2269 return ret;
2270}
2271
2272// --- emdi12.CrossRequestType.value.SetStrptr
2273// Convert string to field.
2274// If the string is invalid, set numeric value to DFLT
2275void emdi12::value_SetStrptr(emdi12::CrossRequestType& parent, algo::strptr rhs, emdi12_CrossRequestTypeEnum dflt) {
2276 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
2277}
2278
2279// --- emdi12.CrossRequestType.value.ReadStrptrMaybe
2280// Convert string to field. Return success value
2281bool emdi12::value_ReadStrptrMaybe(emdi12::CrossRequestType& parent, algo::strptr rhs) {
2282 bool retval = false;
2283 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
2284 if (!retval) { // didn't work? try reading as underlying type
2285 retval = u32_ReadStrptrMaybe(parent.value,rhs);
2286 }
2287 return retval;
2288}
2289
2290// --- emdi12.CrossRequestType..ReadStrptrMaybe
2291// Read fields of emdi12::CrossRequestType from an ascii string.
2292// The format of the string is the format of the emdi12::CrossRequestType's only field
2293bool emdi12::CrossRequestType_ReadStrptrMaybe(emdi12::CrossRequestType &parent, algo::strptr in_str) {
2294 bool retval = true;
2295 retval = retval && value_ReadStrptrMaybe(parent, in_str);
2296 return retval;
2297}
2298
2299// --- emdi12.CrossRequestType..Print
2300// print string representation of ROW to string STR
2301// cfmt:emdi12.CrossRequestType.String printfmt:Raw
2302void emdi12::CrossRequestType_Print(emdi12::CrossRequestType row, algo::cstring& str) {
2303 emdi12::value_Print(row, str);
2304}
2305
2306// --- emdi12.InputSource.value.ToCstr
2307// Convert numeric value of field to one of predefined string constants.
2308// If string is found, return a static C string. Otherwise, return NULL.
2309const char* emdi12::value_ToCstr(const emdi12::InputSource& parent) {
2310 const char *ret = NULL;
2311 switch(value_GetEnum(parent)) {
2312 case emdi12_InputSource_1 : ret = "1"; break;
2313 }
2314 return ret;
2315}
2316
2317// --- emdi12.InputSource.value.Print
2318// Convert value to a string. First, attempt conversion to a known string.
2319// If no string matches, print value as a numeric value.
2320void emdi12::value_Print(const emdi12::InputSource& parent, algo::cstring &lhs) {
2321 const char *strval = value_ToCstr(parent);
2322 if (strval) {
2323 lhs << strval;
2324 } else {
2325 lhs << parent.value;
2326 }
2327}
2328
2329// --- emdi12.InputSource.value.SetStrptrMaybe
2330// Convert string to field.
2331// If the string is invalid, do not modify field and return false.
2332// In case of success, return true
2333bool emdi12::value_SetStrptrMaybe(emdi12::InputSource& parent, algo::strptr rhs) {
2334 bool ret = false;
2335 switch (elems_N(rhs)) {
2336 case 1: {
2337 switch (u64(rhs[0])) {
2338 case '1': {
2339 value_SetEnum(parent,emdi12_InputSource_1); ret = true; break;
2340 }
2341 }
2342 break;
2343 }
2344 }
2345 return ret;
2346}
2347
2348// --- emdi12.InputSource.value.SetStrptr
2349// Convert string to field.
2350// If the string is invalid, set numeric value to DFLT
2351void emdi12::value_SetStrptr(emdi12::InputSource& parent, algo::strptr rhs, emdi12_InputSourceEnum dflt) {
2352 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
2353}
2354
2355// --- emdi12.InputSource.value.ReadStrptrMaybe
2356// Convert string to field. Return success value
2357bool emdi12::value_ReadStrptrMaybe(emdi12::InputSource& parent, algo::strptr rhs) {
2358 bool retval = false;
2359 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
2360 if (!retval) { // didn't work? try reading as underlying type
2361 retval = u32_ReadStrptrMaybe(parent.value,rhs);
2362 }
2363 return retval;
2364}
2365
2366// --- emdi12.InputSource..ReadStrptrMaybe
2367// Read fields of emdi12::InputSource from an ascii string.
2368// The format of the string is the format of the emdi12::InputSource's only field
2369bool emdi12::InputSource_ReadStrptrMaybe(emdi12::InputSource &parent, algo::strptr in_str) {
2370 bool retval = true;
2371 retval = retval && value_ReadStrptrMaybe(parent, in_str);
2372 return retval;
2373}
2374
2375// --- emdi12.InputSource..Print
2376// print string representation of ROW to string STR
2377// cfmt:emdi12.InputSource.String printfmt:Raw
2378void emdi12::InputSource_Print(emdi12::InputSource row, algo::cstring& str) {
2379 emdi12::value_Print(row, str);
2380}
2381
2382// --- emdi12.CrossRequestSideGrp.Side.ReadStrptrMaybe
2383inline static bool emdi12::Side_ReadStrptrMaybe(emdi12::CrossRequestSideGrp &parent, algo::strptr in_str) {
2384 bool retval = true;
2385 emdi12::Side Side_tmp;
2386 retval = emdi12::Side_ReadStrptrMaybe(Side_tmp, in_str);
2387 if (retval) {
2388 Side_Set(parent, Side_tmp);
2389 }
2390 return retval;
2391}
2392
2393// --- emdi12.CrossRequestSideGrp.pmask_bitcurs.Next
2394// proceed to next item
2395void emdi12::CrossRequestSideGrp_pmask_bitcurs_Next(CrossRequestSideGrp_pmask_bitcurs &curs) {
2396 ++curs.bit;
2397 int index = curs.bit / 32;
2398 int offset = curs.bit % 32;
2399 for (; index < curs.n_elems; ++index, offset = 0) {
2400 u64 rest = curs.elems[index] >> offset;
2401 if (rest) {
2402 offset += algo::u64_BitScanForward(rest);
2403 break;
2404 }
2405 }
2406 curs.bit = index * 32 + offset;
2407}
2408
2409// --- emdi12.CrossRequestSideGrp..ReadFieldMaybe
2410bool emdi12::CrossRequestSideGrp_ReadFieldMaybe(emdi12::CrossRequestSideGrp& parent, algo::strptr field, algo::strptr strval) {
2411 bool retval = true;
2412 emdi12::FieldId field_id;
2413 (void)value_SetStrptrMaybe(field_id,field);
2414 switch(field_id) {
2415 case emdi12_FieldId_pmask: {
2416 retval = false;
2417 break;
2418 }
2419 case emdi12_FieldId_Side: {
2420 retval = Side_ReadStrptrMaybe(parent, strval);
2421 if (retval) {
2422 pmask_qSetBit(parent, 0);
2423 }
2424 break;
2425 }
2426 case emdi12_FieldId_InputSource: {
2427 retval = true;
2428 break;
2429 }
2430 default: break;
2431 }
2432 if (!retval) {
2433 algo_lib::AppendErrtext("attr",field);
2434 }
2435 return retval;
2436}
2437
2438// --- emdi12.CrossRequestSideGrp..ReadStrptrMaybe
2439// Read fields of emdi12::CrossRequestSideGrp from an ascii string.
2440// The format of the string is an ssim Tuple
2441bool emdi12::CrossRequestSideGrp_ReadStrptrMaybe(emdi12::CrossRequestSideGrp &parent, algo::strptr in_str) {
2442 bool retval = true;
2443 retval = algo::StripTypeTag(in_str, "emdi12.CrossRequestSideGrp");
2444 ind_beg(algo::Attr_curs, attr, in_str) {
2445 retval = retval && CrossRequestSideGrp_ReadFieldMaybe(parent, attr.name, attr.value);
2446 }ind_end;
2447 return retval;
2448}
2449
2450// --- emdi12.CrossRequestSideGrp..Print
2451// print string representation of ROW to string STR
2452// cfmt:emdi12.CrossRequestSideGrp.String printfmt:Tuple
2453void emdi12::CrossRequestSideGrp_Print(emdi12::CrossRequestSideGrp& row, algo::cstring& str) {
2454 algo::tempstr temp;
2455 str << "emdi12.CrossRequestSideGrp";
2456
2457 if (Side_PresentQ(row)) {
2458 emdi12::Side_Print(row.Side, temp);
2459 PrintAttrSpaceReset(str,"Side", temp);
2460 }
2461
2462 emdi12::InputSource_Print(InputSource_Get(row), temp);
2463 PrintAttrSpaceReset(str,"InputSource", temp);
2464}
2465
2466// --- emdi12.CrossRequestSideGrp..FastEncode
2467void emdi12::CrossRequestSideGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::CrossRequestSideGrp& parent) {
2468 int index = ary_N(buf);
2469 u64 pmap(0);
2470 // Side type copy optional
2471 if (Side_PresentQ(parent)) {
2472 if (!Side_AssignedQ(state) || !Side_PresentQ(state) || parent.Side.value != state.Side.value ) {
2473 lib_fast::EncodeUnsigned(buf,parent.Side.value,true);
2474 lib_fast::SetPmapBit(pmap,0);
2475 }
2476 } else {
2477 if (Side_AssignedQ(state)) {
2478 lib_fast::EncodeNull(buf);
2479 lib_fast::SetPmapBit(pmap,0);
2480 }
2481 }
2482 state.Side.value = parent.Side.value;
2483 present_qSetBitVal(state,Side_Present_GetBit(state),Side_PresentQ(parent));
2484 Side_SetAssigned(state);
2485 // InputSource type constant mandatory
2486 lib_fast::InsertPmap(buf,index,pmap);
2487}
2488
2489// --- emdi12.CrossRequestSideGrp..FastDecode
2490bool emdi12::CrossRequestSideGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::CrossRequestSideGrp& parent) {
2491 bool ok = true;
2492 u64 pmap;
2493 ok = lib_fast::DecodePmap(from,pmap);
2494 if (!ok) {
2495 state.error << "emdi12.CrossRequestSideGrp: bad pmap" << eol;
2496 }
2497 // Side type copy optional
2498 if (ok) {
2499 bool prs = lib_fast::GetPmapBit(pmap,0);
2500 if (prs) {
2501 prs = !lib_fast::DecodeNull(from);
2502 if (prs) {
2503 ok = lib_fast::DecodeUnsigned(from,parent.Side.value,true);
2504 if (!ok) {
2505 state.error << "emdi12.CrossRequestSideGrp.Side: bad Unsigned" << eol;
2506 }
2507 }
2508 } else if (Side_AssignedQ(state)) {
2509 parent.Side.value = state.Side.value;
2510 prs = Side_PresentQ(state);
2511 } else {
2512 prs = false;
2513 }
2514 pmask_qSetBitVal(parent,Side_Present_GetBit(parent),prs);
2515 Side_SetAssigned(state);
2516 present_qSetBitVal(state,Side_Present_GetBit(state),prs);
2517 state.Side.value = parent.Side.value;
2518 }
2519 // InputSource type constant mandatory
2520 if (ok) {
2521 }
2522 return ok;
2523}
2524
2525// --- emdi12.CrossRequestSideGrp..FixEncode
2526void emdi12::CrossRequestSideGrp_FixEncode(cstring& buf, emdi12::CrossRequestSideGrp& parent, char soh) {
2527 if (Side_PresentQ(parent)) {
2528 buf << "54=" << parent.Side << soh;
2529 }
2530 buf << "979=" << InputSource_Get(parent) << soh;
2531}
2532
2533// --- emdi12.CrossRequest.base.CopyOut
2534// Copy fields out of row
2535void emdi12::parent_CopyOut(emdi12::CrossRequest &row, emdi12::TemplateHeader &out) {
2536 // length: field value is computed
2537 // id: field value is computed
2538 (void)row;//only to avoid -Wunused-parameter
2539 (void)out;//only to avoid -Wunused-parameter
2540}
2541
2542// --- emdi12.CrossRequest.MsgSeqNum.ReadStrptrMaybe
2543inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
2544 bool retval = true;
2545 retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
2546 return retval;
2547}
2548
2549// --- emdi12.CrossRequest.SenderCompID.ReadStrptrMaybe
2550inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
2551 bool retval = true;
2552 retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
2553 return retval;
2554}
2555
2556// --- emdi12.CrossRequest.MarketSegmentID.ReadStrptrMaybe
2557inline static bool emdi12::MarketSegmentID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
2558 bool retval = true;
2559 retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, in_str);
2560 return retval;
2561}
2562
2563// --- emdi12.CrossRequest.SecurityID.ReadStrptrMaybe
2564inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
2565 bool retval = true;
2566 retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
2567 return retval;
2568}
2569
2570// --- emdi12.CrossRequest.OrderQty.ReadStrptrMaybe
2571inline static bool emdi12::OrderQty_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
2572 bool retval = true;
2573 algo::Decimal OrderQty_tmp;
2574 retval = algo::Decimal_ReadStrptrMaybe(OrderQty_tmp, in_str);
2575 if (retval) {
2576 OrderQty_Set(parent, OrderQty_tmp);
2577 }
2578 return retval;
2579}
2580
2581// --- emdi12.CrossRequest.CrossRequestType.ReadStrptrMaybe
2582inline static bool emdi12::CrossRequestType_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
2583 bool retval = true;
2584 retval = emdi12::CrossRequestType_ReadStrptrMaybe(parent.CrossRequestType, in_str);
2585 return retval;
2586}
2587
2588// --- emdi12.CrossRequest.CrossRequestSideGrp.ReadStrptrMaybe
2589inline static bool emdi12::CrossRequestSideGrp_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
2590 bool retval = true;
2591 emdi12::CrossRequestSideGrp CrossRequestSideGrp_tmp;
2592 retval = emdi12::CrossRequestSideGrp_ReadStrptrMaybe(CrossRequestSideGrp_tmp, in_str);
2593 if (retval) {
2594 CrossRequestSideGrp_Set(parent, CrossRequestSideGrp_tmp);
2595 }
2596 return retval;
2597}
2598
2599// --- emdi12.CrossRequest.MDEntryPx.ReadStrptrMaybe
2600inline static bool emdi12::MDEntryPx_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
2601 bool retval = true;
2602 algo::Decimal MDEntryPx_tmp;
2603 retval = algo::Decimal_ReadStrptrMaybe(MDEntryPx_tmp, in_str);
2604 if (retval) {
2605 MDEntryPx_Set(parent, MDEntryPx_tmp);
2606 }
2607 return retval;
2608}
2609
2610// --- emdi12.CrossRequest.TransactTime.ReadStrptrMaybe
2611inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
2612 bool retval = true;
2613 retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
2614 return retval;
2615}
2616
2617// --- emdi12.CrossRequest.pmask_bitcurs.Next
2618// proceed to next item
2619void emdi12::CrossRequest_pmask_bitcurs_Next(CrossRequest_pmask_bitcurs &curs) {
2620 ++curs.bit;
2621 int index = curs.bit / 32;
2622 int offset = curs.bit % 32;
2623 for (; index < curs.n_elems; ++index, offset = 0) {
2624 u64 rest = curs.elems[index] >> offset;
2625 if (rest) {
2626 offset += algo::u64_BitScanForward(rest);
2627 break;
2628 }
2629 }
2630 curs.bit = index * 32 + offset;
2631}
2632
2633// --- emdi12.CrossRequest..ReadFieldMaybe
2634bool emdi12::CrossRequest_ReadFieldMaybe(emdi12::CrossRequest& parent, algo::strptr field, algo::strptr strval) {
2635 bool retval = true;
2636 emdi12::FieldId field_id;
2637 (void)value_SetStrptrMaybe(field_id,field);
2638 switch(field_id) {
2639 case emdi12_FieldId_base: {
2640 retval = false;
2641 break;
2642 }
2643 case emdi12_FieldId_length: {
2644 retval = false;
2645 break;
2646 }
2647 case emdi12_FieldId_id: {
2648 retval = false;
2649 break;
2650 }
2651 case emdi12_FieldId_pmask: {
2652 retval = false;
2653 break;
2654 }
2655 case emdi12_FieldId_MsgType: {
2656 retval = true;
2657 break;
2658 }
2659 case emdi12_FieldId_MsgSeqNum: {
2660 retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
2661 break;
2662 }
2663 case emdi12_FieldId_SenderCompID: {
2664 retval = SenderCompID_ReadStrptrMaybe(parent, strval);
2665 break;
2666 }
2667 case emdi12_FieldId_MarketSegmentID: {
2668 retval = MarketSegmentID_ReadStrptrMaybe(parent, strval);
2669 break;
2670 }
2671 case emdi12_FieldId_SecurityID: {
2672 retval = SecurityID_ReadStrptrMaybe(parent, strval);
2673 break;
2674 }
2675 case emdi12_FieldId_SecurityIDSource: {
2676 retval = true;
2677 break;
2678 }
2679 case emdi12_FieldId_OrderQty: {
2680 retval = OrderQty_ReadStrptrMaybe(parent, strval);
2681 if (retval) {
2682 pmask_qSetBit(parent, 2);
2683 }
2684 break;
2685 }
2686 case emdi12_FieldId_CrossRequestType: {
2687 retval = CrossRequestType_ReadStrptrMaybe(parent, strval);
2688 break;
2689 }
2690 case emdi12_FieldId_CrossRequestSideGrp: {
2691 retval = CrossRequestSideGrp_ReadStrptrMaybe(parent, strval);
2692 if (retval) {
2693 pmask_qSetBit(parent, 0);
2694 }
2695 break;
2696 }
2697 case emdi12_FieldId_MDEntryPx: {
2698 retval = MDEntryPx_ReadStrptrMaybe(parent, strval);
2699 if (retval) {
2700 pmask_qSetBit(parent, 1);
2701 }
2702 break;
2703 }
2704 case emdi12_FieldId_TransactTime: {
2705 retval = TransactTime_ReadStrptrMaybe(parent, strval);
2706 break;
2707 }
2708 default: break;
2709 }
2710 if (!retval) {
2711 algo_lib::AppendErrtext("attr",field);
2712 }
2713 return retval;
2714}
2715
2716// --- emdi12.CrossRequest..ReadStrptrMaybe
2717// Read fields of emdi12::CrossRequest from an ascii string.
2718// The format of the string is an ssim Tuple
2719bool emdi12::CrossRequest_ReadStrptrMaybe(emdi12::CrossRequest &parent, algo::strptr in_str) {
2720 bool retval = true;
2721 retval = algo::StripTypeTag(in_str, "emdi12.CrossRequest");
2722 ind_beg(algo::Attr_curs, attr, in_str) {
2723 retval = retval && CrossRequest_ReadFieldMaybe(parent, attr.name, attr.value);
2724 }ind_end;
2725 return retval;
2726}
2727
2728// --- emdi12.CrossRequest..Init
2729// Set all fields to initial values.
2730void emdi12::CrossRequest_Init(emdi12::CrossRequest& parent) {
2731 parent.length = u32(ssizeof(parent) + (0));
2732 parent.id = u32(96);
2733 parent.pmask = u32(0);
2734 parent.MsgSeqNum = u32(0);
2735 parent.SenderCompID = u32(0);
2736 parent.MarketSegmentID = u32(0);
2737 parent.SecurityID = i64(0);
2738 parent.OrderQty = algo::Decimal(algo::Decimal(0,0));
2739 parent.MDEntryPx = algo::Decimal(algo::Decimal(0,0));
2740 parent.TransactTime = i64(0);
2741}
2742
2743// --- emdi12.CrossRequest..Print
2744// print string representation of ROW to string STR
2745// cfmt:emdi12.CrossRequest.String printfmt:Tuple
2746void emdi12::CrossRequest_Print(emdi12::CrossRequest& row, algo::cstring& str) {
2747 algo::tempstr temp;
2748 str << "emdi12.CrossRequest";
2749
2750 algo::strptr_Print(MsgType_Get(row), temp);
2751 PrintAttrSpaceReset(str,"MsgType", temp);
2752
2753 u32_Print(row.MsgSeqNum, temp);
2754 PrintAttrSpaceReset(str,"MsgSeqNum", temp);
2755
2756 u32_Print(row.SenderCompID, temp);
2757 PrintAttrSpaceReset(str,"SenderCompID", temp);
2758
2759 u32_Print(row.MarketSegmentID, temp);
2760 PrintAttrSpaceReset(str,"MarketSegmentID", temp);
2761
2762 i64_Print(row.SecurityID, temp);
2763 PrintAttrSpaceReset(str,"SecurityID", temp);
2764
2765 algo::strptr_Print(SecurityIDSource_Get(row), temp);
2766 PrintAttrSpaceReset(str,"SecurityIDSource", temp);
2767
2768 if (OrderQty_PresentQ(row)) {
2769 algo::Decimal_Print(row.OrderQty, temp);
2770 PrintAttrSpaceReset(str,"OrderQty", temp);
2771 }
2772
2773 emdi12::CrossRequestType_Print(row.CrossRequestType, temp);
2774 PrintAttrSpaceReset(str,"CrossRequestType", temp);
2775
2776 if (CrossRequestSideGrp_PresentQ(row)) {
2777 emdi12::CrossRequestSideGrp_Print(row.CrossRequestSideGrp, temp);
2778 PrintAttrSpaceReset(str,"CrossRequestSideGrp", temp);
2779 }
2780
2781 if (MDEntryPx_PresentQ(row)) {
2782 algo::Decimal_Print(row.MDEntryPx, temp);
2783 PrintAttrSpaceReset(str,"MDEntryPx", temp);
2784 }
2785
2786 i64_Print(row.TransactTime, temp);
2787 PrintAttrSpaceReset(str,"TransactTime", temp);
2788}
2789
2790// --- emdi12.CrossRequest..FastEncode
2791void emdi12::CrossRequest_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::CrossRequest& parent) {
2792 int index = ary_N(buf);
2793 u64 pmap(0);
2794 if (!tid_AssignedQ(state) || parent.id != state.tid) {
2795 lib_fast::EncodeUnsigned(buf,parent.id,false);
2796 lib_fast::SetPmapBit(pmap,0);
2797 }
2798 tid_SetAssigned(state);
2799 state.tid = parent.id;
2800 // MsgType string constant mandatory
2801 // MsgSeqNum unsigned increment mandatory
2802 if (MsgSeqNum_AssignedQ(state)) {
2803 if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
2804 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
2805 lib_fast::SetPmapBit(pmap,1);
2806 }
2807 } else {
2808 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
2809 lib_fast::SetPmapBit(pmap,1);
2810 }
2811 state.MsgSeqNum = parent.MsgSeqNum;
2812 MsgSeqNum_SetAssigned(state);
2813 // SenderCompID unsigned none mandatory
2814 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
2815 // MarketSegmentID unsigned none mandatory
2816 lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
2817 // SecurityID signed none mandatory
2818 lib_fast::EncodeSigned(buf,parent.SecurityID,false);
2819 // SecurityIDSource string constant mandatory
2820 // OrderQty scaled none optional
2821 if (OrderQty_PresentQ(parent)) {
2822 lib_fast::EncodeScaled(buf,parent.OrderQty,true);
2823 } else {
2824 lib_fast::EncodeNull(buf);
2825 }
2826 // CrossRequestType type none mandatory
2827 lib_fast::EncodeUnsigned(buf,parent.CrossRequestType.value,false);
2828 // CrossRequestSideGrp sequence none optional
2829 if (CrossRequestSideGrp_PresentQ(parent)) {
2830 CrossRequestSideGrp_FastEncode(buf,state,parent.CrossRequestSideGrp);
2831 lib_fast::SetPmapBit(pmap,2);
2832 }
2833 // MDEntryPx scaled none optional
2834 if (MDEntryPx_PresentQ(parent)) {
2835 lib_fast::EncodeScaled(buf,parent.MDEntryPx,true);
2836 } else {
2837 lib_fast::EncodeNull(buf);
2838 }
2839 // TransactTime signed none mandatory
2840 lib_fast::EncodeSigned(buf,parent.TransactTime,false);
2841 lib_fast::InsertPmap(buf,index,pmap);
2842}
2843
2844// --- emdi12.CrossRequest..FastDecode
2845bool emdi12::CrossRequest_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::CrossRequest& parent) {
2846 bool ok = true;
2847 // MsgType string constant mandatory
2848 if (ok) {
2849 }
2850 // MsgSeqNum unsigned increment mandatory
2851 if (ok) {
2852 bool prs = lib_fast::GetPmapBit(pmap,1);
2853 if (prs) {
2854 ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
2855 if (!ok) {
2856 state.error << "emdi12.CrossRequest.MsgSeqNum: bad Unsigned" << eol;
2857 }
2858 } else if (MsgSeqNum_AssignedQ(state)) {
2859 parent.MsgSeqNum = state.MsgSeqNum + 1;
2860 } else {
2861 ok = false;
2862 state.error << "emdi12.CrossRequest.MsgSeqNum: increment operator: previous value unassigned" << eol;
2863 }
2864 MsgSeqNum_SetAssigned(state);
2865 state.MsgSeqNum = parent.MsgSeqNum;
2866 }
2867 // SenderCompID unsigned none mandatory
2868 if (ok) {
2869 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
2870 if (!ok) {
2871 state.error << "emdi12.CrossRequest.SenderCompID: bad Unsigned" << eol;
2872 }
2873 }
2874 // MarketSegmentID unsigned none mandatory
2875 if (ok) {
2876 ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
2877 if (!ok) {
2878 state.error << "emdi12.CrossRequest.MarketSegmentID: bad Unsigned" << eol;
2879 }
2880 }
2881 // SecurityID signed none mandatory
2882 if (ok) {
2883 ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
2884 if (!ok) {
2885 state.error << "emdi12.CrossRequest.SecurityID: bad Signed" << eol;
2886 }
2887 }
2888 // SecurityIDSource string constant mandatory
2889 if (ok) {
2890 }
2891 // OrderQty scaled none optional
2892 if (ok) {
2893 bool prs = !lib_fast::DecodeNull(from);
2894 if (prs) {
2895 ok = lib_fast::DecodeScaled(from,parent.OrderQty,true);
2896 if (!ok) {
2897 state.error << "emdi12.CrossRequest.OrderQty: bad Scaled" << eol;
2898 }
2899 }
2900 pmask_qSetBitVal(parent,OrderQty_Present_GetBit(parent),prs);
2901 }
2902 // CrossRequestType type none mandatory
2903 if (ok) {
2904 ok = lib_fast::DecodeUnsigned(from,parent.CrossRequestType.value,false);
2905 if (!ok) {
2906 state.error << "emdi12.CrossRequest.CrossRequestType: bad Unsigned" << eol;
2907 }
2908 }
2909 // CrossRequestSideGrp sequence none optional
2910 if (ok) {
2911 bool prs = lib_fast::GetPmapBit(pmap,2);
2912 pmask_qSetBitVal(parent,CrossRequestSideGrp_Present_GetBit(parent),prs);
2913 if (prs) {
2914 ok = CrossRequestSideGrp_FastDecode(from,state,parent.CrossRequestSideGrp);
2915 }
2916 }
2917 // MDEntryPx scaled none optional
2918 if (ok) {
2919 bool prs = !lib_fast::DecodeNull(from);
2920 if (prs) {
2921 ok = lib_fast::DecodeScaled(from,parent.MDEntryPx,true);
2922 if (!ok) {
2923 state.error << "emdi12.CrossRequest.MDEntryPx: bad Scaled" << eol;
2924 }
2925 }
2926 pmask_qSetBitVal(parent,MDEntryPx_Present_GetBit(parent),prs);
2927 }
2928 // TransactTime signed none mandatory
2929 if (ok) {
2930 ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
2931 if (!ok) {
2932 state.error << "emdi12.CrossRequest.TransactTime: bad Signed" << eol;
2933 }
2934 }
2935 return ok;
2936}
2937
2938// --- emdi12.CrossRequest..FixEncode
2939void emdi12::CrossRequest_FixEncode(cstring& buf, emdi12::CrossRequest& parent, char soh) {
2940 buf << "35=" << MsgType_Get(parent) << soh;
2941 buf << "34=" << parent.MsgSeqNum << soh;
2942 buf << "49=" << parent.SenderCompID << soh;
2943 buf << "1300=" << parent.MarketSegmentID << soh;
2944 buf << "48=" << parent.SecurityID << soh;
2945 buf << "22=" << SecurityIDSource_Get(parent) << soh;
2946 if (OrderQty_PresentQ(parent)) {
2947 buf << "38=" << parent.OrderQty << soh;
2948 }
2949 buf << "28771=" << parent.CrossRequestType << soh;
2950 buf << "552=1" << soh;
2951 if (MDEntryPx_PresentQ(parent)) {
2952 buf << "270=" << parent.MDEntryPx << soh;
2953 }
2954 buf << "60=" << parent.TransactTime << soh;
2955}
2956
2957// --- emdi12.MDOriginType.value.ToCstr
2958// Convert numeric value of field to one of predefined string constants.
2959// If string is found, return a static C string. Otherwise, return NULL.
2960const char* emdi12::value_ToCstr(const emdi12::MDOriginType& parent) {
2961 const char *ret = NULL;
2962 switch(value_GetEnum(parent)) {
2963 case emdi12_MDOriginType_0 : ret = "0"; break;
2964 case emdi12_MDOriginType_1 : ret = "1"; break;
2965 }
2966 return ret;
2967}
2968
2969// --- emdi12.MDOriginType.value.Print
2970// Convert value to a string. First, attempt conversion to a known string.
2971// If no string matches, print value as a numeric value.
2972void emdi12::value_Print(const emdi12::MDOriginType& parent, algo::cstring &lhs) {
2973 const char *strval = value_ToCstr(parent);
2974 if (strval) {
2975 lhs << strval;
2976 } else {
2977 lhs << parent.value;
2978 }
2979}
2980
2981// --- emdi12.MDOriginType.value.SetStrptrMaybe
2982// Convert string to field.
2983// If the string is invalid, do not modify field and return false.
2984// In case of success, return true
2985bool emdi12::value_SetStrptrMaybe(emdi12::MDOriginType& parent, algo::strptr rhs) {
2986 bool ret = false;
2987 switch (elems_N(rhs)) {
2988 case 1: {
2989 switch (u64(rhs[0])) {
2990 case '0': {
2991 value_SetEnum(parent,emdi12_MDOriginType_0); ret = true; break;
2992 }
2993 case '1': {
2994 value_SetEnum(parent,emdi12_MDOriginType_1); ret = true; break;
2995 }
2996 }
2997 break;
2998 }
2999 }
3000 return ret;
3001}
3002
3003// --- emdi12.MDOriginType.value.SetStrptr
3004// Convert string to field.
3005// If the string is invalid, set numeric value to DFLT
3006void emdi12::value_SetStrptr(emdi12::MDOriginType& parent, algo::strptr rhs, emdi12_MDOriginTypeEnum dflt) {
3007 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
3008}
3009
3010// --- emdi12.MDOriginType.value.ReadStrptrMaybe
3011// Convert string to field. Return success value
3012bool emdi12::value_ReadStrptrMaybe(emdi12::MDOriginType& parent, algo::strptr rhs) {
3013 bool retval = false;
3014 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
3015 if (!retval) { // didn't work? try reading as underlying type
3016 retval = u32_ReadStrptrMaybe(parent.value,rhs);
3017 }
3018 return retval;
3019}
3020
3021// --- emdi12.MDOriginType..ReadStrptrMaybe
3022// Read fields of emdi12::MDOriginType from an ascii string.
3023// The format of the string is the format of the emdi12::MDOriginType's only field
3024bool emdi12::MDOriginType_ReadStrptrMaybe(emdi12::MDOriginType &parent, algo::strptr in_str) {
3025 bool retval = true;
3026 retval = retval && value_ReadStrptrMaybe(parent, in_str);
3027 return retval;
3028}
3029
3030// --- emdi12.MDOriginType..Print
3031// print string representation of ROW to string STR
3032// cfmt:emdi12.MDOriginType.String printfmt:Raw
3033void emdi12::MDOriginType_Print(emdi12::MDOriginType row, algo::cstring& str) {
3034 emdi12::value_Print(row, str);
3035}
3036
3037// --- emdi12.MDUpdateAction.value.ToCstr
3038// Convert numeric value of field to one of predefined string constants.
3039// If string is found, return a static C string. Otherwise, return NULL.
3040const char* emdi12::value_ToCstr(const emdi12::MDUpdateAction& parent) {
3041 const char *ret = NULL;
3042 switch(value_GetEnum(parent)) {
3043 case emdi12_MDUpdateAction_0 : ret = "0"; break;
3044 case emdi12_MDUpdateAction_1 : ret = "1"; break;
3045 case emdi12_MDUpdateAction_2 : ret = "2"; break;
3046 case emdi12_MDUpdateAction_3 : ret = "3"; break;
3047 case emdi12_MDUpdateAction_4 : ret = "4"; break;
3048 case emdi12_MDUpdateAction_5 : ret = "5"; break;
3049 }
3050 return ret;
3051}
3052
3053// --- emdi12.MDUpdateAction.value.Print
3054// Convert value to a string. First, attempt conversion to a known string.
3055// If no string matches, print value as a numeric value.
3056void emdi12::value_Print(const emdi12::MDUpdateAction& parent, algo::cstring &lhs) {
3057 const char *strval = value_ToCstr(parent);
3058 if (strval) {
3059 lhs << strval;
3060 } else {
3061 lhs << parent.value;
3062 }
3063}
3064
3065// --- emdi12.MDUpdateAction.value.SetStrptrMaybe
3066// Convert string to field.
3067// If the string is invalid, do not modify field and return false.
3068// In case of success, return true
3069bool emdi12::value_SetStrptrMaybe(emdi12::MDUpdateAction& parent, algo::strptr rhs) {
3070 bool ret = false;
3071 switch (elems_N(rhs)) {
3072 case 1: {
3073 switch (u64(rhs[0])) {
3074 case '0': {
3075 value_SetEnum(parent,emdi12_MDUpdateAction_0); ret = true; break;
3076 }
3077 case '1': {
3078 value_SetEnum(parent,emdi12_MDUpdateAction_1); ret = true; break;
3079 }
3080 case '2': {
3081 value_SetEnum(parent,emdi12_MDUpdateAction_2); ret = true; break;
3082 }
3083 case '3': {
3084 value_SetEnum(parent,emdi12_MDUpdateAction_3); ret = true; break;
3085 }
3086 case '4': {
3087 value_SetEnum(parent,emdi12_MDUpdateAction_4); ret = true; break;
3088 }
3089 case '5': {
3090 value_SetEnum(parent,emdi12_MDUpdateAction_5); ret = true; break;
3091 }
3092 }
3093 break;
3094 }
3095 }
3096 return ret;
3097}
3098
3099// --- emdi12.MDUpdateAction.value.SetStrptr
3100// Convert string to field.
3101// If the string is invalid, set numeric value to DFLT
3102void emdi12::value_SetStrptr(emdi12::MDUpdateAction& parent, algo::strptr rhs, emdi12_MDUpdateActionEnum dflt) {
3103 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
3104}
3105
3106// --- emdi12.MDUpdateAction.value.ReadStrptrMaybe
3107// Convert string to field. Return success value
3108bool emdi12::value_ReadStrptrMaybe(emdi12::MDUpdateAction& parent, algo::strptr rhs) {
3109 bool retval = false;
3110 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
3111 if (!retval) { // didn't work? try reading as underlying type
3112 retval = u32_ReadStrptrMaybe(parent.value,rhs);
3113 }
3114 return retval;
3115}
3116
3117// --- emdi12.MDUpdateAction..ReadStrptrMaybe
3118// Read fields of emdi12::MDUpdateAction from an ascii string.
3119// The format of the string is the format of the emdi12::MDUpdateAction's only field
3120bool emdi12::MDUpdateAction_ReadStrptrMaybe(emdi12::MDUpdateAction &parent, algo::strptr in_str) {
3121 bool retval = true;
3122 retval = retval && value_ReadStrptrMaybe(parent, in_str);
3123 return retval;
3124}
3125
3126// --- emdi12.MDUpdateAction..Print
3127// print string representation of ROW to string STR
3128// cfmt:emdi12.MDUpdateAction.String printfmt:Raw
3129void emdi12::MDUpdateAction_Print(emdi12::MDUpdateAction row, algo::cstring& str) {
3130 emdi12::value_Print(row, str);
3131}
3132
3133// --- emdi12.MDEntryType.value.ToCstr
3134// Convert numeric value of field to one of predefined string constants.
3135// If string is found, return a static C string. Otherwise, return NULL.
3136const char* emdi12::value_ToCstr(const emdi12::MDEntryType& parent) {
3137 const char *ret = NULL;
3138 switch(value_GetEnum(parent)) {
3139 case emdi12_MDEntryType_0 : ret = "0"; break;
3140 case emdi12_MDEntryType_1 : ret = "1"; break;
3141 case emdi12_MDEntryType_2 : ret = "2"; break;
3142 case emdi12_MDEntryType_J : ret = "J"; break;
3143 case emdi12_MDEntryType_Q : ret = "Q"; break;
3144 case emdi12_MDEntryType_6 : ret = "6"; break;
3145 case emdi12_MDEntryType_C : ret = "C"; break;
3146 case emdi12_MDEntryType_B : ret = "B"; break;
3147 case emdi12_MDEntryType_b : ret = "b"; break;
3148 case emdi12_MDEntryType_c : ret = "c"; break;
3149 case emdi12_MDEntryType_A : ret = "A"; break;
3150 }
3151 return ret;
3152}
3153
3154// --- emdi12.MDEntryType.value.Print
3155// Convert value to a string. First, attempt conversion to a known string.
3156// If no string matches, print value as a numeric value.
3157void emdi12::value_Print(const emdi12::MDEntryType& parent, algo::cstring &lhs) {
3158 const char *strval = value_ToCstr(parent);
3159 if (strval) {
3160 lhs << strval;
3161 } else {
3162 lhs << parent.value;
3163 }
3164}
3165
3166// --- emdi12.MDEntryType.value.SetStrptrMaybe
3167// Convert string to field.
3168// If the string is invalid, do not modify field and return false.
3169// In case of success, return true
3170bool emdi12::value_SetStrptrMaybe(emdi12::MDEntryType& parent, algo::strptr rhs) {
3171 bool ret = false;
3172 switch (elems_N(rhs)) {
3173 case 1: {
3174 switch (u64(rhs[0])) {
3175 case '0': {
3176 value_SetEnum(parent,emdi12_MDEntryType_0); ret = true; break;
3177 }
3178 case '1': {
3179 value_SetEnum(parent,emdi12_MDEntryType_1); ret = true; break;
3180 }
3181 case '2': {
3182 value_SetEnum(parent,emdi12_MDEntryType_2); ret = true; break;
3183 }
3184 case '6': {
3185 value_SetEnum(parent,emdi12_MDEntryType_6); ret = true; break;
3186 }
3187 case 'A': {
3188 value_SetEnum(parent,emdi12_MDEntryType_A); ret = true; break;
3189 }
3190 case 'B': {
3191 value_SetEnum(parent,emdi12_MDEntryType_B); ret = true; break;
3192 }
3193 case 'C': {
3194 value_SetEnum(parent,emdi12_MDEntryType_C); ret = true; break;
3195 }
3196 case 'J': {
3197 value_SetEnum(parent,emdi12_MDEntryType_J); ret = true; break;
3198 }
3199 case 'Q': {
3200 value_SetEnum(parent,emdi12_MDEntryType_Q); ret = true; break;
3201 }
3202 case 'b': {
3203 value_SetEnum(parent,emdi12_MDEntryType_b); ret = true; break;
3204 }
3205 case 'c': {
3206 value_SetEnum(parent,emdi12_MDEntryType_c); ret = true; break;
3207 }
3208 }
3209 break;
3210 }
3211 }
3212 return ret;
3213}
3214
3215// --- emdi12.MDEntryType.value.SetStrptr
3216// Convert string to field.
3217// If the string is invalid, set numeric value to DFLT
3218void emdi12::value_SetStrptr(emdi12::MDEntryType& parent, algo::strptr rhs, emdi12_MDEntryTypeEnum dflt) {
3219 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
3220}
3221
3222// --- emdi12.MDEntryType.value.ReadStrptrMaybe
3223// Convert string to field. Return success value
3224bool emdi12::value_ReadStrptrMaybe(emdi12::MDEntryType& parent, algo::strptr rhs) {
3225 bool retval = false;
3226 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
3227 if (!retval) { // didn't work? try reading as underlying type
3228 retval = u32_ReadStrptrMaybe(parent.value,rhs);
3229 }
3230 return retval;
3231}
3232
3233// --- emdi12.MDEntryType..ReadStrptrMaybe
3234// Read fields of emdi12::MDEntryType from an ascii string.
3235// The format of the string is the format of the emdi12::MDEntryType's only field
3236bool emdi12::MDEntryType_ReadStrptrMaybe(emdi12::MDEntryType &parent, algo::strptr in_str) {
3237 bool retval = true;
3238 retval = retval && value_ReadStrptrMaybe(parent, in_str);
3239 return retval;
3240}
3241
3242// --- emdi12.MDEntryType..Print
3243// print string representation of ROW to string STR
3244// cfmt:emdi12.MDEntryType.String printfmt:Raw
3245void emdi12::MDEntryType_Print(emdi12::MDEntryType row, algo::cstring& str) {
3246 emdi12::value_Print(row, str);
3247}
3248
3249// --- emdi12.SecurityTradingEvent.value.ToCstr
3250// Convert numeric value of field to one of predefined string constants.
3251// If string is found, return a static C string. Otherwise, return NULL.
3252const char* emdi12::value_ToCstr(const emdi12::SecurityTradingEvent& parent) {
3253 const char *ret = NULL;
3254 switch(value_GetEnum(parent)) {
3255 case emdi12_SecurityTradingEvent_0 : ret = "0"; break;
3256 case emdi12_SecurityTradingEvent_10: ret = "10"; break;
3257 case emdi12_SecurityTradingEvent_11: ret = "11"; break;
3258 }
3259 return ret;
3260}
3261
3262// --- emdi12.SecurityTradingEvent.value.Print
3263// Convert value to a string. First, attempt conversion to a known string.
3264// If no string matches, print value as a numeric value.
3265void emdi12::value_Print(const emdi12::SecurityTradingEvent& parent, algo::cstring &lhs) {
3266 const char *strval = value_ToCstr(parent);
3267 if (strval) {
3268 lhs << strval;
3269 } else {
3270 lhs << parent.value;
3271 }
3272}
3273
3274// --- emdi12.SecurityTradingEvent.value.SetStrptrMaybe
3275// Convert string to field.
3276// If the string is invalid, do not modify field and return false.
3277// In case of success, return true
3278bool emdi12::value_SetStrptrMaybe(emdi12::SecurityTradingEvent& parent, algo::strptr rhs) {
3279 bool ret = false;
3280 switch (elems_N(rhs)) {
3281 case 1: {
3282 switch (u64(rhs[0])) {
3283 case '0': {
3284 value_SetEnum(parent,emdi12_SecurityTradingEvent_0); ret = true; break;
3285 }
3286 }
3287 break;
3288 }
3289 case 2: {
3290 switch (u64(algo::ReadLE16(rhs.elems))) {
3291 case LE_STR2('1','0'): {
3292 value_SetEnum(parent,emdi12_SecurityTradingEvent_10); ret = true; break;
3293 }
3294 case LE_STR2('1','1'): {
3295 value_SetEnum(parent,emdi12_SecurityTradingEvent_11); ret = true; break;
3296 }
3297 }
3298 break;
3299 }
3300 }
3301 return ret;
3302}
3303
3304// --- emdi12.SecurityTradingEvent.value.SetStrptr
3305// Convert string to field.
3306// If the string is invalid, set numeric value to DFLT
3307void emdi12::value_SetStrptr(emdi12::SecurityTradingEvent& parent, algo::strptr rhs, emdi12_SecurityTradingEventEnum dflt) {
3308 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
3309}
3310
3311// --- emdi12.SecurityTradingEvent.value.ReadStrptrMaybe
3312// Convert string to field. Return success value
3313bool emdi12::value_ReadStrptrMaybe(emdi12::SecurityTradingEvent& parent, algo::strptr rhs) {
3314 bool retval = false;
3315 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
3316 if (!retval) { // didn't work? try reading as underlying type
3317 retval = u32_ReadStrptrMaybe(parent.value,rhs);
3318 }
3319 return retval;
3320}
3321
3322// --- emdi12.SecurityTradingEvent..ReadStrptrMaybe
3323// Read fields of emdi12::SecurityTradingEvent from an ascii string.
3324// The format of the string is the format of the emdi12::SecurityTradingEvent's only field
3325bool emdi12::SecurityTradingEvent_ReadStrptrMaybe(emdi12::SecurityTradingEvent &parent, algo::strptr in_str) {
3326 bool retval = true;
3327 retval = retval && value_ReadStrptrMaybe(parent, in_str);
3328 return retval;
3329}
3330
3331// --- emdi12.SecurityTradingEvent..Print
3332// print string representation of ROW to string STR
3333// cfmt:emdi12.SecurityTradingEvent.String printfmt:Raw
3334void emdi12::SecurityTradingEvent_Print(emdi12::SecurityTradingEvent row, algo::cstring& str) {
3335 emdi12::value_Print(row, str);
3336}
3337
3338// --- emdi12.QuoteCondition.value.ToCstr
3339// Convert numeric value of field to one of predefined string constants.
3340// If string is found, return a static C string. Otherwise, return NULL.
3341const char* emdi12::value_ToCstr(const emdi12::QuoteCondition& parent) {
3342 const char *ret = NULL;
3343 switch(value_GetEnum(parent)) {
3344 case emdi12_QuoteCondition_F : ret = "F"; break;
3345 case emdi12_QuoteCondition_Z : ret = "Z"; break;
3346 }
3347 return ret;
3348}
3349
3350// --- emdi12.QuoteCondition.value.Print
3351// Convert value to a string. First, attempt conversion to a known string.
3352// If no string matches, print value as a numeric value.
3353void emdi12::value_Print(const emdi12::QuoteCondition& parent, algo::cstring &lhs) {
3354 const char *strval = value_ToCstr(parent);
3355 if (strval) {
3356 lhs << strval;
3357 } else {
3358 lhs << parent.value;
3359 }
3360}
3361
3362// --- emdi12.QuoteCondition.value.SetStrptrMaybe
3363// Convert string to field.
3364// If the string is invalid, do not modify field and return false.
3365// In case of success, return true
3366bool emdi12::value_SetStrptrMaybe(emdi12::QuoteCondition& parent, algo::strptr rhs) {
3367 bool ret = false;
3368 switch (elems_N(rhs)) {
3369 case 1: {
3370 switch (u64(rhs[0])) {
3371 case 'F': {
3372 value_SetEnum(parent,emdi12_QuoteCondition_F); ret = true; break;
3373 }
3374 case 'Z': {
3375 value_SetEnum(parent,emdi12_QuoteCondition_Z); ret = true; break;
3376 }
3377 }
3378 break;
3379 }
3380 }
3381 return ret;
3382}
3383
3384// --- emdi12.QuoteCondition.value.SetStrptr
3385// Convert string to field.
3386// If the string is invalid, set numeric value to DFLT
3387void emdi12::value_SetStrptr(emdi12::QuoteCondition& parent, algo::strptr rhs, emdi12_QuoteConditionEnum dflt) {
3388 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
3389}
3390
3391// --- emdi12.QuoteCondition.value.ReadStrptrMaybe
3392// Convert string to field. Return success value
3393bool emdi12::value_ReadStrptrMaybe(emdi12::QuoteCondition& parent, algo::strptr rhs) {
3394 bool retval = false;
3395 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
3396 if (!retval) { // didn't work? try reading as underlying type
3397 retval = u32_ReadStrptrMaybe(parent.value,rhs);
3398 }
3399 return retval;
3400}
3401
3402// --- emdi12.QuoteCondition..ReadStrptrMaybe
3403// Read fields of emdi12::QuoteCondition from an ascii string.
3404// The format of the string is the format of the emdi12::QuoteCondition's only field
3405bool emdi12::QuoteCondition_ReadStrptrMaybe(emdi12::QuoteCondition &parent, algo::strptr in_str) {
3406 bool retval = true;
3407 retval = retval && value_ReadStrptrMaybe(parent, in_str);
3408 return retval;
3409}
3410
3411// --- emdi12.QuoteCondition..Print
3412// print string representation of ROW to string STR
3413// cfmt:emdi12.QuoteCondition.String printfmt:Raw
3414void emdi12::QuoteCondition_Print(emdi12::QuoteCondition row, algo::cstring& str) {
3415 emdi12::value_Print(row, str);
3416}
3417
3418// --- emdi12.TrdType.value.ToCstr
3419// Convert numeric value of field to one of predefined string constants.
3420// If string is found, return a static C string. Otherwise, return NULL.
3421const char* emdi12::value_ToCstr(const emdi12::TrdType& parent) {
3422 const char *ret = NULL;
3423 switch(value_GetEnum(parent)) {
3424 case emdi12_TrdType_0 : ret = "0"; break;
3425 case emdi12_TrdType_1 : ret = "1"; break;
3426 case emdi12_TrdType_2 : ret = "2"; break;
3427 case emdi12_TrdType_12 : ret = "12"; break;
3428 case emdi12_TrdType_50 : ret = "50"; break;
3429 case emdi12_TrdType_54 : ret = "54"; break;
3430 case emdi12_TrdType_55 : ret = "55"; break;
3431 case emdi12_TrdType_1000 : ret = "1000"; break;
3432 case emdi12_TrdType_1001 : ret = "1001"; break;
3433 case emdi12_TrdType_1002 : ret = "1002"; break;
3434 case emdi12_TrdType_1004 : ret = "1004"; break;
3435 case emdi12_TrdType_1006 : ret = "1006"; break;
3436 case emdi12_TrdType_1007 : ret = "1007"; break;
3437 case emdi12_TrdType_1017 : ret = "1017"; break;
3438 case emdi12_TrdType_1100 : ret = "1100"; break;
3439 case emdi12_TrdType_1101 : ret = "1101"; break;
3440 case emdi12_TrdType_1102 : ret = "1102"; break;
3441 case emdi12_TrdType_1103 : ret = "1103"; break;
3442 case emdi12_TrdType_1104 : ret = "1104"; break;
3443 case emdi12_TrdType_1107 : ret = "1107"; break;
3444 case emdi12_TrdType_1108 : ret = "1108"; break;
3445 }
3446 return ret;
3447}
3448
3449// --- emdi12.TrdType.value.Print
3450// Convert value to a string. First, attempt conversion to a known string.
3451// If no string matches, print value as a numeric value.
3452void emdi12::value_Print(const emdi12::TrdType& parent, algo::cstring &lhs) {
3453 const char *strval = value_ToCstr(parent);
3454 if (strval) {
3455 lhs << strval;
3456 } else {
3457 lhs << parent.value;
3458 }
3459}
3460
3461// --- emdi12.TrdType.value.SetStrptrMaybe
3462// Convert string to field.
3463// If the string is invalid, do not modify field and return false.
3464// In case of success, return true
3465bool emdi12::value_SetStrptrMaybe(emdi12::TrdType& parent, algo::strptr rhs) {
3466 bool ret = false;
3467 switch (elems_N(rhs)) {
3468 case 1: {
3469 switch (u64(rhs[0])) {
3470 case '0': {
3471 value_SetEnum(parent,emdi12_TrdType_0); ret = true; break;
3472 }
3473 case '1': {
3474 value_SetEnum(parent,emdi12_TrdType_1); ret = true; break;
3475 }
3476 case '2': {
3477 value_SetEnum(parent,emdi12_TrdType_2); ret = true; break;
3478 }
3479 }
3480 break;
3481 }
3482 case 2: {
3483 switch (u64(algo::ReadLE16(rhs.elems))) {
3484 case LE_STR2('1','2'): {
3485 value_SetEnum(parent,emdi12_TrdType_12); ret = true; break;
3486 }
3487 case LE_STR2('5','0'): {
3488 value_SetEnum(parent,emdi12_TrdType_50); ret = true; break;
3489 }
3490 case LE_STR2('5','4'): {
3491 value_SetEnum(parent,emdi12_TrdType_54); ret = true; break;
3492 }
3493 case LE_STR2('5','5'): {
3494 value_SetEnum(parent,emdi12_TrdType_55); ret = true; break;
3495 }
3496 }
3497 break;
3498 }
3499 case 4: {
3500 switch (u64(algo::ReadLE32(rhs.elems))) {
3501 case LE_STR4('1','0','0','0'): {
3502 value_SetEnum(parent,emdi12_TrdType_1000); ret = true; break;
3503 }
3504 case LE_STR4('1','0','0','1'): {
3505 value_SetEnum(parent,emdi12_TrdType_1001); ret = true; break;
3506 }
3507 case LE_STR4('1','0','0','2'): {
3508 value_SetEnum(parent,emdi12_TrdType_1002); ret = true; break;
3509 }
3510 case LE_STR4('1','0','0','4'): {
3511 value_SetEnum(parent,emdi12_TrdType_1004); ret = true; break;
3512 }
3513 case LE_STR4('1','0','0','6'): {
3514 value_SetEnum(parent,emdi12_TrdType_1006); ret = true; break;
3515 }
3516 case LE_STR4('1','0','0','7'): {
3517 value_SetEnum(parent,emdi12_TrdType_1007); ret = true; break;
3518 }
3519 case LE_STR4('1','0','1','7'): {
3520 value_SetEnum(parent,emdi12_TrdType_1017); ret = true; break;
3521 }
3522 case LE_STR4('1','1','0','0'): {
3523 value_SetEnum(parent,emdi12_TrdType_1100); ret = true; break;
3524 }
3525 case LE_STR4('1','1','0','1'): {
3526 value_SetEnum(parent,emdi12_TrdType_1101); ret = true; break;
3527 }
3528 case LE_STR4('1','1','0','2'): {
3529 value_SetEnum(parent,emdi12_TrdType_1102); ret = true; break;
3530 }
3531 case LE_STR4('1','1','0','3'): {
3532 value_SetEnum(parent,emdi12_TrdType_1103); ret = true; break;
3533 }
3534 case LE_STR4('1','1','0','4'): {
3535 value_SetEnum(parent,emdi12_TrdType_1104); ret = true; break;
3536 }
3537 case LE_STR4('1','1','0','7'): {
3538 value_SetEnum(parent,emdi12_TrdType_1107); ret = true; break;
3539 }
3540 case LE_STR4('1','1','0','8'): {
3541 value_SetEnum(parent,emdi12_TrdType_1108); ret = true; break;
3542 }
3543 }
3544 break;
3545 }
3546 }
3547 return ret;
3548}
3549
3550// --- emdi12.TrdType.value.SetStrptr
3551// Convert string to field.
3552// If the string is invalid, set numeric value to DFLT
3553void emdi12::value_SetStrptr(emdi12::TrdType& parent, algo::strptr rhs, emdi12_TrdTypeEnum dflt) {
3554 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
3555}
3556
3557// --- emdi12.TrdType.value.ReadStrptrMaybe
3558// Convert string to field. Return success value
3559bool emdi12::value_ReadStrptrMaybe(emdi12::TrdType& parent, algo::strptr rhs) {
3560 bool retval = false;
3561 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
3562 if (!retval) { // didn't work? try reading as underlying type
3563 retval = u32_ReadStrptrMaybe(parent.value,rhs);
3564 }
3565 return retval;
3566}
3567
3568// --- emdi12.TrdType..ReadStrptrMaybe
3569// Read fields of emdi12::TrdType from an ascii string.
3570// The format of the string is the format of the emdi12::TrdType's only field
3571bool emdi12::TrdType_ReadStrptrMaybe(emdi12::TrdType &parent, algo::strptr in_str) {
3572 bool retval = true;
3573 retval = retval && value_ReadStrptrMaybe(parent, in_str);
3574 return retval;
3575}
3576
3577// --- emdi12.TrdType..Print
3578// print string representation of ROW to string STR
3579// cfmt:emdi12.TrdType.String printfmt:Raw
3580void emdi12::TrdType_Print(emdi12::TrdType row, algo::cstring& str) {
3581 emdi12::value_Print(row, str);
3582}
3583
3584// --- emdi12.TradeConditionSet.U.ReadStrptrMaybe
3585inline static bool emdi12::U_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3586 bool retval = true;
3587 bool U_tmp;
3588 retval = bool_ReadStrptrMaybe(U_tmp, in_str);
3589 if (retval) {
3590 U_Set(parent, U_tmp);
3591 }
3592 return retval;
3593}
3594
3595// --- emdi12.TradeConditionSet.R.ReadStrptrMaybe
3596inline static bool emdi12::R_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3597 bool retval = true;
3598 bool R_tmp;
3599 retval = bool_ReadStrptrMaybe(R_tmp, in_str);
3600 if (retval) {
3601 R_Set(parent, R_tmp);
3602 }
3603 return retval;
3604}
3605
3606// --- emdi12.TradeConditionSet.AX.ReadStrptrMaybe
3607inline static bool emdi12::AX_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3608 bool retval = true;
3609 bool AX_tmp;
3610 retval = bool_ReadStrptrMaybe(AX_tmp, in_str);
3611 if (retval) {
3612 AX_Set(parent, AX_tmp);
3613 }
3614 return retval;
3615}
3616
3617// --- emdi12.TradeConditionSet.AY.ReadStrptrMaybe
3618inline static bool emdi12::AY_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3619 bool retval = true;
3620 bool AY_tmp;
3621 retval = bool_ReadStrptrMaybe(AY_tmp, in_str);
3622 if (retval) {
3623 AY_Set(parent, AY_tmp);
3624 }
3625 return retval;
3626}
3627
3628// --- emdi12.TradeConditionSet.AJ.ReadStrptrMaybe
3629inline static bool emdi12::AJ_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3630 bool retval = true;
3631 bool AJ_tmp;
3632 retval = bool_ReadStrptrMaybe(AJ_tmp, in_str);
3633 if (retval) {
3634 AJ_Set(parent, AJ_tmp);
3635 }
3636 return retval;
3637}
3638
3639// --- emdi12.TradeConditionSet.AW.ReadStrptrMaybe
3640inline static bool emdi12::AW_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3641 bool retval = true;
3642 bool AW_tmp;
3643 retval = bool_ReadStrptrMaybe(AW_tmp, in_str);
3644 if (retval) {
3645 AW_Set(parent, AW_tmp);
3646 }
3647 return retval;
3648}
3649
3650// --- emdi12.TradeConditionSet.k.ReadStrptrMaybe
3651inline static bool emdi12::k_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3652 bool retval = true;
3653 bool k_tmp;
3654 retval = bool_ReadStrptrMaybe(k_tmp, in_str);
3655 if (retval) {
3656 k_Set(parent, k_tmp);
3657 }
3658 return retval;
3659}
3660
3661// --- emdi12.TradeConditionSet.BD.ReadStrptrMaybe
3662inline static bool emdi12::BD_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3663 bool retval = true;
3664 bool BD_tmp;
3665 retval = bool_ReadStrptrMaybe(BD_tmp, in_str);
3666 if (retval) {
3667 BD_Set(parent, BD_tmp);
3668 }
3669 return retval;
3670}
3671
3672// --- emdi12.TradeConditionSet.a.ReadStrptrMaybe
3673inline static bool emdi12::a_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3674 bool retval = true;
3675 bool a_tmp;
3676 retval = bool_ReadStrptrMaybe(a_tmp, in_str);
3677 if (retval) {
3678 a_Set(parent, a_tmp);
3679 }
3680 return retval;
3681}
3682
3683// --- emdi12.TradeConditionSet.BC.ReadStrptrMaybe
3684inline static bool emdi12::BC_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3685 bool retval = true;
3686 bool BC_tmp;
3687 retval = bool_ReadStrptrMaybe(BC_tmp, in_str);
3688 if (retval) {
3689 BC_Set(parent, BC_tmp);
3690 }
3691 return retval;
3692}
3693
3694// --- emdi12.TradeConditionSet.SA.ReadStrptrMaybe
3695inline static bool emdi12::SA_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3696 bool retval = true;
3697 bool SA_tmp;
3698 retval = bool_ReadStrptrMaybe(SA_tmp, in_str);
3699 if (retval) {
3700 SA_Set(parent, SA_tmp);
3701 }
3702 return retval;
3703}
3704
3705// --- emdi12.TradeConditionSet.TC.ReadStrptrMaybe
3706inline static bool emdi12::TC_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3707 bool retval = true;
3708 bool TC_tmp;
3709 retval = bool_ReadStrptrMaybe(TC_tmp, in_str);
3710 if (retval) {
3711 TC_Set(parent, TC_tmp);
3712 }
3713 return retval;
3714}
3715
3716// --- emdi12.TradeConditionSet.XR.ReadStrptrMaybe
3717inline static bool emdi12::XR_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3718 bool retval = true;
3719 bool XR_tmp;
3720 retval = bool_ReadStrptrMaybe(XR_tmp, in_str);
3721 if (retval) {
3722 XR_Set(parent, XR_tmp);
3723 }
3724 return retval;
3725}
3726
3727// --- emdi12.TradeConditionSet..ReadFieldMaybe
3728bool emdi12::TradeConditionSet_ReadFieldMaybe(emdi12::TradeConditionSet& parent, algo::strptr field, algo::strptr strval) {
3729 bool retval = true;
3730 emdi12::FieldId field_id;
3731 (void)value_SetStrptrMaybe(field_id,field);
3732 switch(field_id) {
3733 case emdi12_FieldId_value: {
3734 retval = u32_ReadStrptrMaybe(parent.value, strval);
3735 break;
3736 }
3737 case emdi12_FieldId_U: {
3738 retval = U_ReadStrptrMaybe(parent, strval);
3739 break;
3740 }
3741 case emdi12_FieldId_R: {
3742 retval = R_ReadStrptrMaybe(parent, strval);
3743 break;
3744 }
3745 case emdi12_FieldId_AX: {
3746 retval = AX_ReadStrptrMaybe(parent, strval);
3747 break;
3748 }
3749 case emdi12_FieldId_AY: {
3750 retval = AY_ReadStrptrMaybe(parent, strval);
3751 break;
3752 }
3753 case emdi12_FieldId_AJ: {
3754 retval = AJ_ReadStrptrMaybe(parent, strval);
3755 break;
3756 }
3757 case emdi12_FieldId_AW: {
3758 retval = AW_ReadStrptrMaybe(parent, strval);
3759 break;
3760 }
3761 case emdi12_FieldId_k: {
3762 retval = k_ReadStrptrMaybe(parent, strval);
3763 break;
3764 }
3765 case emdi12_FieldId_BD: {
3766 retval = BD_ReadStrptrMaybe(parent, strval);
3767 break;
3768 }
3769 case emdi12_FieldId_a: {
3770 retval = a_ReadStrptrMaybe(parent, strval);
3771 break;
3772 }
3773 case emdi12_FieldId_BC: {
3774 retval = BC_ReadStrptrMaybe(parent, strval);
3775 break;
3776 }
3777 case emdi12_FieldId_SA: {
3778 retval = SA_ReadStrptrMaybe(parent, strval);
3779 break;
3780 }
3781 case emdi12_FieldId_TC: {
3782 retval = TC_ReadStrptrMaybe(parent, strval);
3783 break;
3784 }
3785 case emdi12_FieldId_XR: {
3786 retval = XR_ReadStrptrMaybe(parent, strval);
3787 break;
3788 }
3789 default: break;
3790 }
3791 if (!retval) {
3792 algo_lib::AppendErrtext("attr",field);
3793 }
3794 return retval;
3795}
3796
3797// --- emdi12.TradeConditionSet..ReadStrptrMaybe
3798// Read fields of emdi12::TradeConditionSet from an ascii string.
3799bool emdi12::TradeConditionSet_ReadStrptrMaybe(emdi12::TradeConditionSet &parent, algo::strptr in_str) {
3800 bool retval = true;
3801 // Clear affected bits first)
3802 U_Set(parent, false);
3803 R_Set(parent, false);
3804 AX_Set(parent, false);
3805 AY_Set(parent, false);
3806 AJ_Set(parent, false);
3807 AW_Set(parent, false);
3808 k_Set(parent, false);
3809 BD_Set(parent, false);
3810 a_Set(parent, false);
3811 BC_Set(parent, false);
3812 SA_Set(parent, false);
3813 TC_Set(parent, false);
3814 XR_Set(parent, false);
3815 // Read ' '-separated list of bools
3816 while (ch_N(in_str)) {
3817 strptr field_name;
3818 algo::NextSep(in_str,' ',field_name);
3819 field_name = algo::Trimmed(field_name);
3820 if (ch_N(field_name)) {
3821 emdi12::FieldId field_id;
3822 bool ok = emdi12::value_SetStrptrMaybe(field_id,field_name);
3823 if (ok) {
3824 switch (field_id) {
3825 case emdi12_FieldId_U: {
3826 U_Set(parent, true);
3827 } break;
3828 case emdi12_FieldId_R: {
3829 R_Set(parent, true);
3830 } break;
3831 case emdi12_FieldId_AX: {
3832 AX_Set(parent, true);
3833 } break;
3834 case emdi12_FieldId_AY: {
3835 AY_Set(parent, true);
3836 } break;
3837 case emdi12_FieldId_AJ: {
3838 AJ_Set(parent, true);
3839 } break;
3840 case emdi12_FieldId_AW: {
3841 AW_Set(parent, true);
3842 } break;
3843 case emdi12_FieldId_k: {
3844 k_Set(parent, true);
3845 } break;
3846 case emdi12_FieldId_BD: {
3847 BD_Set(parent, true);
3848 } break;
3849 case emdi12_FieldId_a: {
3850 a_Set(parent, true);
3851 } break;
3852 case emdi12_FieldId_BC: {
3853 BC_Set(parent, true);
3854 } break;
3855 case emdi12_FieldId_SA: {
3856 SA_Set(parent, true);
3857 } break;
3858 case emdi12_FieldId_TC: {
3859 TC_Set(parent, true);
3860 } break;
3861 case emdi12_FieldId_XR: {
3862 XR_Set(parent, true);
3863 } break;
3864 default: ok = false; break;
3865 }
3866 }
3867 if (!ok) {
3868 algo_lib::AppendErrtext("bitfld",field_name);
3869 retval = false;
3870 }
3871 }
3872 }
3873 return retval;
3874}
3875
3876// --- emdi12.TradeConditionSet..Init
3877// Set all fields to initial values.
3878void emdi12::TradeConditionSet_Init(emdi12::TradeConditionSet& parent) {
3879 parent.value = u32(0);
3880}
3881
3882// --- emdi12.TradeConditionSet..Print
3883// print string representation of ROW to string STR
3884// cfmt:emdi12.TradeConditionSet.String printfmt:Bitset
3885void emdi12::TradeConditionSet_Print(emdi12::TradeConditionSet row, algo::cstring& str) {
3886 algo::ListSep ls(" ");
3887 if (U_Get(row)) {
3888 str << ls << "U";
3889 }
3890 if (R_Get(row)) {
3891 str << ls << "R";
3892 }
3893 if (AX_Get(row)) {
3894 str << ls << "AX";
3895 }
3896 if (AY_Get(row)) {
3897 str << ls << "AY";
3898 }
3899 if (AJ_Get(row)) {
3900 str << ls << "AJ";
3901 }
3902 if (AW_Get(row)) {
3903 str << ls << "AW";
3904 }
3905 if (k_Get(row)) {
3906 str << ls << "k";
3907 }
3908 if (BD_Get(row)) {
3909 str << ls << "BD";
3910 }
3911 if (a_Get(row)) {
3912 str << ls << "a";
3913 }
3914 if (BC_Get(row)) {
3915 str << ls << "BC";
3916 }
3917 if (SA_Get(row)) {
3918 str << ls << "SA";
3919 }
3920 if (TC_Get(row)) {
3921 str << ls << "TC";
3922 }
3923 if (XR_Get(row)) {
3924 str << ls << "XR";
3925 }
3926}
3927
3928// --- emdi12.MultiLegReportingType.value.ToCstr
3929// Convert numeric value of field to one of predefined string constants.
3930// If string is found, return a static C string. Otherwise, return NULL.
3931const char* emdi12::value_ToCstr(const emdi12::MultiLegReportingType& parent) {
3932 const char *ret = NULL;
3933 switch(value_GetEnum(parent)) {
3934 case emdi12_MultiLegReportingType_1: ret = "1"; break;
3935 case emdi12_MultiLegReportingType_2: ret = "2"; break;
3936 case emdi12_MultiLegReportingType_3: ret = "3"; break;
3937 }
3938 return ret;
3939}
3940
3941// --- emdi12.MultiLegReportingType.value.Print
3942// Convert value to a string. First, attempt conversion to a known string.
3943// If no string matches, print value as a numeric value.
3944void emdi12::value_Print(const emdi12::MultiLegReportingType& parent, algo::cstring &lhs) {
3945 const char *strval = value_ToCstr(parent);
3946 if (strval) {
3947 lhs << strval;
3948 } else {
3949 lhs << parent.value;
3950 }
3951}
3952
3953// --- emdi12.MultiLegReportingType.value.SetStrptrMaybe
3954// Convert string to field.
3955// If the string is invalid, do not modify field and return false.
3956// In case of success, return true
3957bool emdi12::value_SetStrptrMaybe(emdi12::MultiLegReportingType& parent, algo::strptr rhs) {
3958 bool ret = false;
3959 switch (elems_N(rhs)) {
3960 case 1: {
3961 switch (u64(rhs[0])) {
3962 case '1': {
3963 value_SetEnum(parent,emdi12_MultiLegReportingType_1); ret = true; break;
3964 }
3965 case '2': {
3966 value_SetEnum(parent,emdi12_MultiLegReportingType_2); ret = true; break;
3967 }
3968 case '3': {
3969 value_SetEnum(parent,emdi12_MultiLegReportingType_3); ret = true; break;
3970 }
3971 }
3972 break;
3973 }
3974 }
3975 return ret;
3976}
3977
3978// --- emdi12.MultiLegReportingType.value.SetStrptr
3979// Convert string to field.
3980// If the string is invalid, set numeric value to DFLT
3981void emdi12::value_SetStrptr(emdi12::MultiLegReportingType& parent, algo::strptr rhs, emdi12_MultiLegReportingTypeEnum dflt) {
3982 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
3983}
3984
3985// --- emdi12.MultiLegReportingType.value.ReadStrptrMaybe
3986// Convert string to field. Return success value
3987bool emdi12::value_ReadStrptrMaybe(emdi12::MultiLegReportingType& parent, algo::strptr rhs) {
3988 bool retval = false;
3989 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
3990 if (!retval) { // didn't work? try reading as underlying type
3991 retval = u32_ReadStrptrMaybe(parent.value,rhs);
3992 }
3993 return retval;
3994}
3995
3996// --- emdi12.MultiLegReportingType..ReadStrptrMaybe
3997// Read fields of emdi12::MultiLegReportingType from an ascii string.
3998// The format of the string is the format of the emdi12::MultiLegReportingType's only field
3999bool emdi12::MultiLegReportingType_ReadStrptrMaybe(emdi12::MultiLegReportingType &parent, algo::strptr in_str) {
4000 bool retval = true;
4001 retval = retval && value_ReadStrptrMaybe(parent, in_str);
4002 return retval;
4003}
4004
4005// --- emdi12.MultiLegReportingType..Print
4006// print string representation of ROW to string STR
4007// cfmt:emdi12.MultiLegReportingType.String printfmt:Raw
4008void emdi12::MultiLegReportingType_Print(emdi12::MultiLegReportingType row, algo::cstring& str) {
4009 emdi12::value_Print(row, str);
4010}
4011
4012// --- emdi12.MultiLegPriceModel.value.ToCstr
4013// Convert numeric value of field to one of predefined string constants.
4014// If string is found, return a static C string. Otherwise, return NULL.
4015const char* emdi12::value_ToCstr(const emdi12::MultiLegPriceModel& parent) {
4016 const char *ret = NULL;
4017 switch(value_GetEnum(parent)) {
4018 case emdi12_MultiLegPriceModel_0 : ret = "0"; break;
4019 case emdi12_MultiLegPriceModel_1 : ret = "1"; break;
4020 }
4021 return ret;
4022}
4023
4024// --- emdi12.MultiLegPriceModel.value.Print
4025// Convert value to a string. First, attempt conversion to a known string.
4026// If no string matches, print value as a numeric value.
4027void emdi12::value_Print(const emdi12::MultiLegPriceModel& parent, algo::cstring &lhs) {
4028 const char *strval = value_ToCstr(parent);
4029 if (strval) {
4030 lhs << strval;
4031 } else {
4032 lhs << parent.value;
4033 }
4034}
4035
4036// --- emdi12.MultiLegPriceModel.value.SetStrptrMaybe
4037// Convert string to field.
4038// If the string is invalid, do not modify field and return false.
4039// In case of success, return true
4040bool emdi12::value_SetStrptrMaybe(emdi12::MultiLegPriceModel& parent, algo::strptr rhs) {
4041 bool ret = false;
4042 switch (elems_N(rhs)) {
4043 case 1: {
4044 switch (u64(rhs[0])) {
4045 case '0': {
4046 value_SetEnum(parent,emdi12_MultiLegPriceModel_0); ret = true; break;
4047 }
4048 case '1': {
4049 value_SetEnum(parent,emdi12_MultiLegPriceModel_1); ret = true; break;
4050 }
4051 }
4052 break;
4053 }
4054 }
4055 return ret;
4056}
4057
4058// --- emdi12.MultiLegPriceModel.value.SetStrptr
4059// Convert string to field.
4060// If the string is invalid, set numeric value to DFLT
4061void emdi12::value_SetStrptr(emdi12::MultiLegPriceModel& parent, algo::strptr rhs, emdi12_MultiLegPriceModelEnum dflt) {
4062 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
4063}
4064
4065// --- emdi12.MultiLegPriceModel.value.ReadStrptrMaybe
4066// Convert string to field. Return success value
4067bool emdi12::value_ReadStrptrMaybe(emdi12::MultiLegPriceModel& parent, algo::strptr rhs) {
4068 bool retval = false;
4069 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
4070 if (!retval) { // didn't work? try reading as underlying type
4071 retval = u32_ReadStrptrMaybe(parent.value,rhs);
4072 }
4073 return retval;
4074}
4075
4076// --- emdi12.MultiLegPriceModel..ReadStrptrMaybe
4077// Read fields of emdi12::MultiLegPriceModel from an ascii string.
4078// The format of the string is the format of the emdi12::MultiLegPriceModel's only field
4079bool emdi12::MultiLegPriceModel_ReadStrptrMaybe(emdi12::MultiLegPriceModel &parent, algo::strptr in_str) {
4080 bool retval = true;
4081 retval = retval && value_ReadStrptrMaybe(parent, in_str);
4082 return retval;
4083}
4084
4085// --- emdi12.MultiLegPriceModel..Print
4086// print string representation of ROW to string STR
4087// cfmt:emdi12.MultiLegPriceModel.String printfmt:Raw
4088void emdi12::MultiLegPriceModel_Print(emdi12::MultiLegPriceModel row, algo::cstring& str) {
4089 emdi12::value_Print(row, str);
4090}
4091
4092// --- emdi12.TradeEntryGrp.TrdType.ReadStrptrMaybe
4093inline static bool emdi12::TrdType_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4094 bool retval = true;
4095 emdi12::TrdType TrdType_tmp;
4096 retval = emdi12::TrdType_ReadStrptrMaybe(TrdType_tmp, in_str);
4097 if (retval) {
4098 TrdType_Set(parent, TrdType_tmp);
4099 }
4100 return retval;
4101}
4102
4103// --- emdi12.TradeEntryGrp.AlgorithmicTradeIndicator.ReadStrptrMaybe
4104inline static bool emdi12::AlgorithmicTradeIndicator_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4105 bool retval = true;
4106 emdi12::AlgorithmicTradeIndicator AlgorithmicTradeIndicator_tmp;
4107 retval = emdi12::AlgorithmicTradeIndicator_ReadStrptrMaybe(AlgorithmicTradeIndicator_tmp, in_str);
4108 if (retval) {
4109 AlgorithmicTradeIndicator_Set(parent, AlgorithmicTradeIndicator_tmp);
4110 }
4111 return retval;
4112}
4113
4114// --- emdi12.TradeEntryGrp.TradeCondition.ReadStrptrMaybe
4115inline static bool emdi12::TradeCondition_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4116 bool retval = true;
4117 emdi12::TradeConditionSet TradeCondition_tmp;
4118 retval = emdi12::TradeConditionSet_ReadStrptrMaybe(TradeCondition_tmp, in_str);
4119 if (retval) {
4120 TradeCondition_Set(parent, TradeCondition_tmp);
4121 }
4122 return retval;
4123}
4124
4125// --- emdi12.TradeEntryGrp.MultiLegReportingType.ReadStrptrMaybe
4126inline static bool emdi12::MultiLegReportingType_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4127 bool retval = true;
4128 emdi12::MultiLegReportingType MultiLegReportingType_tmp;
4129 retval = emdi12::MultiLegReportingType_ReadStrptrMaybe(MultiLegReportingType_tmp, in_str);
4130 if (retval) {
4131 MultiLegReportingType_Set(parent, MultiLegReportingType_tmp);
4132 }
4133 return retval;
4134}
4135
4136// --- emdi12.TradeEntryGrp.MultiLegPriceModel.ReadStrptrMaybe
4137inline static bool emdi12::MultiLegPriceModel_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4138 bool retval = true;
4139 emdi12::MultiLegPriceModel MultiLegPriceModel_tmp;
4140 retval = emdi12::MultiLegPriceModel_ReadStrptrMaybe(MultiLegPriceModel_tmp, in_str);
4141 if (retval) {
4142 MultiLegPriceModel_Set(parent, MultiLegPriceModel_tmp);
4143 }
4144 return retval;
4145}
4146
4147// --- emdi12.TradeEntryGrp.AggressorTime.ReadStrptrMaybe
4148inline static bool emdi12::AggressorTime_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4149 bool retval = true;
4150 i64 AggressorTime_tmp;
4151 retval = i64_ReadStrptrMaybe(AggressorTime_tmp, in_str);
4152 if (retval) {
4153 AggressorTime_Set(parent, AggressorTime_tmp);
4154 }
4155 return retval;
4156}
4157
4158// --- emdi12.TradeEntryGrp.RequestTime.ReadStrptrMaybe
4159inline static bool emdi12::RequestTime_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4160 bool retval = true;
4161 i64 RequestTime_tmp;
4162 retval = i64_ReadStrptrMaybe(RequestTime_tmp, in_str);
4163 if (retval) {
4164 RequestTime_Set(parent, RequestTime_tmp);
4165 }
4166 return retval;
4167}
4168
4169// --- emdi12.TradeEntryGrp.AggressorSide.ReadStrptrMaybe
4170inline static bool emdi12::AggressorSide_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4171 bool retval = true;
4172 emdi12::Side AggressorSide_tmp;
4173 retval = emdi12::Side_ReadStrptrMaybe(AggressorSide_tmp, in_str);
4174 if (retval) {
4175 AggressorSide_Set(parent, AggressorSide_tmp);
4176 }
4177 return retval;
4178}
4179
4180// --- emdi12.TradeEntryGrp.NumberOfBuyOrders.ReadStrptrMaybe
4181inline static bool emdi12::NumberOfBuyOrders_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4182 bool retval = true;
4183 u32 NumberOfBuyOrders_tmp;
4184 retval = u32_ReadStrptrMaybe(NumberOfBuyOrders_tmp, in_str);
4185 if (retval) {
4186 NumberOfBuyOrders_Set(parent, NumberOfBuyOrders_tmp);
4187 }
4188 return retval;
4189}
4190
4191// --- emdi12.TradeEntryGrp.NumberOfSellOrders.ReadStrptrMaybe
4192inline static bool emdi12::NumberOfSellOrders_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4193 bool retval = true;
4194 u32 NumberOfSellOrders_tmp;
4195 retval = u32_ReadStrptrMaybe(NumberOfSellOrders_tmp, in_str);
4196 if (retval) {
4197 NumberOfSellOrders_Set(parent, NumberOfSellOrders_tmp);
4198 }
4199 return retval;
4200}
4201
4202// --- emdi12.TradeEntryGrp.TotalNumOfTrades.ReadStrptrMaybe
4203inline static bool emdi12::TotalNumOfTrades_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4204 bool retval = true;
4205 u32 TotalNumOfTrades_tmp;
4206 retval = u32_ReadStrptrMaybe(TotalNumOfTrades_tmp, in_str);
4207 if (retval) {
4208 TotalNumOfTrades_Set(parent, TotalNumOfTrades_tmp);
4209 }
4210 return retval;
4211}
4212
4213// --- emdi12.TradeEntryGrp.RestingCxlQty.ReadStrptrMaybe
4214inline static bool emdi12::RestingCxlQty_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4215 bool retval = true;
4216 algo::Decimal RestingCxlQty_tmp;
4217 retval = algo::Decimal_ReadStrptrMaybe(RestingCxlQty_tmp, in_str);
4218 if (retval) {
4219 RestingCxlQty_Set(parent, RestingCxlQty_tmp);
4220 }
4221 return retval;
4222}
4223
4224// --- emdi12.TradeEntryGrp.MDEntryID.ReadStrptrMaybe
4225inline static bool emdi12::MDEntryID_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4226 bool retval = true;
4227 u32 MDEntryID_tmp;
4228 retval = u32_ReadStrptrMaybe(MDEntryID_tmp, in_str);
4229 if (retval) {
4230 MDEntryID_Set(parent, MDEntryID_tmp);
4231 }
4232 return retval;
4233}
4234
4235// --- emdi12.TradeEntryGrp.NonDisclosedTradeVolume.ReadStrptrMaybe
4236inline static bool emdi12::NonDisclosedTradeVolume_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4237 bool retval = true;
4238 algo::Decimal NonDisclosedTradeVolume_tmp;
4239 retval = algo::Decimal_ReadStrptrMaybe(NonDisclosedTradeVolume_tmp, in_str);
4240 if (retval) {
4241 NonDisclosedTradeVolume_Set(parent, NonDisclosedTradeVolume_tmp);
4242 }
4243 return retval;
4244}
4245
4246// --- emdi12.TradeEntryGrp.pmask_bitcurs.Next
4247// proceed to next item
4248void emdi12::TradeEntryGrp_pmask_bitcurs_Next(TradeEntryGrp_pmask_bitcurs &curs) {
4249 ++curs.bit;
4250 int index = curs.bit / 32;
4251 int offset = curs.bit % 32;
4252 for (; index < curs.n_elems; ++index, offset = 0) {
4253 u64 rest = curs.elems[index] >> offset;
4254 if (rest) {
4255 offset += algo::u64_BitScanForward(rest);
4256 break;
4257 }
4258 }
4259 curs.bit = index * 32 + offset;
4260}
4261
4262// --- emdi12.TradeEntryGrp..ReadFieldMaybe
4263bool emdi12::TradeEntryGrp_ReadFieldMaybe(emdi12::TradeEntryGrp& parent, algo::strptr field, algo::strptr strval) {
4264 bool retval = true;
4265 emdi12::FieldId field_id;
4266 (void)value_SetStrptrMaybe(field_id,field);
4267 switch(field_id) {
4268 case emdi12_FieldId_pmask: {
4269 retval = false;
4270 break;
4271 }
4272 case emdi12_FieldId_TrdType: {
4273 retval = TrdType_ReadStrptrMaybe(parent, strval);
4274 if (retval) {
4275 pmask_qSetBit(parent, 13);
4276 }
4277 break;
4278 }
4279 case emdi12_FieldId_AlgorithmicTradeIndicator: {
4280 retval = AlgorithmicTradeIndicator_ReadStrptrMaybe(parent, strval);
4281 if (retval) {
4282 pmask_qSetBit(parent, 2);
4283 }
4284 break;
4285 }
4286 case emdi12_FieldId_TradeCondition: {
4287 retval = TradeCondition_ReadStrptrMaybe(parent, strval);
4288 if (retval) {
4289 pmask_qSetBit(parent, 12);
4290 }
4291 break;
4292 }
4293 case emdi12_FieldId_MultiLegReportingType: {
4294 retval = MultiLegReportingType_ReadStrptrMaybe(parent, strval);
4295 if (retval) {
4296 pmask_qSetBit(parent, 5);
4297 }
4298 break;
4299 }
4300 case emdi12_FieldId_MultiLegPriceModel: {
4301 retval = MultiLegPriceModel_ReadStrptrMaybe(parent, strval);
4302 if (retval) {
4303 pmask_qSetBit(parent, 4);
4304 }
4305 break;
4306 }
4307 case emdi12_FieldId_AggressorTime: {
4308 retval = AggressorTime_ReadStrptrMaybe(parent, strval);
4309 if (retval) {
4310 pmask_qSetBit(parent, 1);
4311 }
4312 break;
4313 }
4314 case emdi12_FieldId_RequestTime: {
4315 retval = RequestTime_ReadStrptrMaybe(parent, strval);
4316 if (retval) {
4317 pmask_qSetBit(parent, 9);
4318 }
4319 break;
4320 }
4321 case emdi12_FieldId_AggressorSide: {
4322 retval = AggressorSide_ReadStrptrMaybe(parent, strval);
4323 if (retval) {
4324 pmask_qSetBit(parent, 0);
4325 }
4326 break;
4327 }
4328 case emdi12_FieldId_NumberOfBuyOrders: {
4329 retval = NumberOfBuyOrders_ReadStrptrMaybe(parent, strval);
4330 if (retval) {
4331 pmask_qSetBit(parent, 7);
4332 }
4333 break;
4334 }
4335 case emdi12_FieldId_NumberOfSellOrders: {
4336 retval = NumberOfSellOrders_ReadStrptrMaybe(parent, strval);
4337 if (retval) {
4338 pmask_qSetBit(parent, 8);
4339 }
4340 break;
4341 }
4342 case emdi12_FieldId_TotalNumOfTrades: {
4343 retval = TotalNumOfTrades_ReadStrptrMaybe(parent, strval);
4344 if (retval) {
4345 pmask_qSetBit(parent, 11);
4346 }
4347 break;
4348 }
4349 case emdi12_FieldId_RestingCxlQty: {
4350 retval = RestingCxlQty_ReadStrptrMaybe(parent, strval);
4351 if (retval) {
4352 pmask_qSetBit(parent, 10);
4353 }
4354 break;
4355 }
4356 case emdi12_FieldId_MDEntryID: {
4357 retval = MDEntryID_ReadStrptrMaybe(parent, strval);
4358 if (retval) {
4359 pmask_qSetBit(parent, 3);
4360 }
4361 break;
4362 }
4363 case emdi12_FieldId_NonDisclosedTradeVolume: {
4364 retval = NonDisclosedTradeVolume_ReadStrptrMaybe(parent, strval);
4365 if (retval) {
4366 pmask_qSetBit(parent, 6);
4367 }
4368 break;
4369 }
4370 default: break;
4371 }
4372 if (!retval) {
4373 algo_lib::AppendErrtext("attr",field);
4374 }
4375 return retval;
4376}
4377
4378// --- emdi12.TradeEntryGrp..ReadStrptrMaybe
4379// Read fields of emdi12::TradeEntryGrp from an ascii string.
4380// The format of the string is an ssim Tuple
4381bool emdi12::TradeEntryGrp_ReadStrptrMaybe(emdi12::TradeEntryGrp &parent, algo::strptr in_str) {
4382 bool retval = true;
4383 retval = algo::StripTypeTag(in_str, "emdi12.TradeEntryGrp");
4384 ind_beg(algo::Attr_curs, attr, in_str) {
4385 retval = retval && TradeEntryGrp_ReadFieldMaybe(parent, attr.name, attr.value);
4386 }ind_end;
4387 return retval;
4388}
4389
4390// --- emdi12.TradeEntryGrp..Init
4391// Set all fields to initial values.
4392void emdi12::TradeEntryGrp_Init(emdi12::TradeEntryGrp& parent) {
4393 parent.pmask = u32(0);
4394 parent.AlgorithmicTradeIndicator = emdi12_AlgorithmicTradeIndicatorEnum(0);
4395 parent.TradeCondition = emdi12::TradeConditionSet(1);
4396 parent.MultiLegReportingType = emdi12_MultiLegReportingTypeEnum(1);
4397 parent.MultiLegPriceModel = emdi12_MultiLegPriceModelEnum(0);
4398 parent.AggressorTime = i64(0);
4399 parent.RequestTime = i64(0);
4400 parent.NumberOfBuyOrders = u32(0);
4401 parent.NumberOfSellOrders = u32(0);
4402 parent.TotalNumOfTrades = u32(0);
4403 parent.RestingCxlQty = algo::Decimal(algo::Decimal(0,0));
4404 parent.MDEntryID = u32(0);
4405 parent.NonDisclosedTradeVolume = algo::Decimal(algo::Decimal(0,0));
4406}
4407
4408// --- emdi12.TradeEntryGrp..Print
4409// print string representation of ROW to string STR
4410// cfmt:emdi12.TradeEntryGrp.String printfmt:Tuple
4411void emdi12::TradeEntryGrp_Print(emdi12::TradeEntryGrp& row, algo::cstring& str) {
4412 algo::tempstr temp;
4413 str << "emdi12.TradeEntryGrp";
4414
4415 if (TrdType_PresentQ(row)) {
4416 emdi12::TrdType_Print(row.TrdType, temp);
4417 PrintAttrSpaceReset(str,"TrdType", temp);
4418 }
4419
4420 if (AlgorithmicTradeIndicator_PresentQ(row)) {
4421 emdi12::AlgorithmicTradeIndicator_Print(row.AlgorithmicTradeIndicator, temp);
4422 PrintAttrSpaceReset(str,"AlgorithmicTradeIndicator", temp);
4423 }
4424
4425 if (TradeCondition_PresentQ(row)) {
4426 emdi12::TradeConditionSet_Print(row.TradeCondition, temp);
4427 PrintAttrSpaceReset(str,"TradeCondition", temp);
4428 }
4429
4430 if (MultiLegReportingType_PresentQ(row)) {
4431 emdi12::MultiLegReportingType_Print(row.MultiLegReportingType, temp);
4432 PrintAttrSpaceReset(str,"MultiLegReportingType", temp);
4433 }
4434
4435 if (MultiLegPriceModel_PresentQ(row)) {
4436 emdi12::MultiLegPriceModel_Print(row.MultiLegPriceModel, temp);
4437 PrintAttrSpaceReset(str,"MultiLegPriceModel", temp);
4438 }
4439
4440 if (AggressorTime_PresentQ(row)) {
4441 i64_Print(row.AggressorTime, temp);
4442 PrintAttrSpaceReset(str,"AggressorTime", temp);
4443 }
4444
4445 if (RequestTime_PresentQ(row)) {
4446 i64_Print(row.RequestTime, temp);
4447 PrintAttrSpaceReset(str,"RequestTime", temp);
4448 }
4449
4450 if (AggressorSide_PresentQ(row)) {
4451 emdi12::Side_Print(row.AggressorSide, temp);
4452 PrintAttrSpaceReset(str,"AggressorSide", temp);
4453 }
4454
4455 if (NumberOfBuyOrders_PresentQ(row)) {
4456 u32_Print(row.NumberOfBuyOrders, temp);
4457 PrintAttrSpaceReset(str,"NumberOfBuyOrders", temp);
4458 }
4459
4460 if (NumberOfSellOrders_PresentQ(row)) {
4461 u32_Print(row.NumberOfSellOrders, temp);
4462 PrintAttrSpaceReset(str,"NumberOfSellOrders", temp);
4463 }
4464
4465 if (TotalNumOfTrades_PresentQ(row)) {
4466 u32_Print(row.TotalNumOfTrades, temp);
4467 PrintAttrSpaceReset(str,"TotalNumOfTrades", temp);
4468 }
4469
4470 if (RestingCxlQty_PresentQ(row)) {
4471 algo::Decimal_Print(row.RestingCxlQty, temp);
4472 PrintAttrSpaceReset(str,"RestingCxlQty", temp);
4473 }
4474
4475 if (MDEntryID_PresentQ(row)) {
4476 u32_Print(row.MDEntryID, temp);
4477 PrintAttrSpaceReset(str,"MDEntryID", temp);
4478 }
4479
4480 if (NonDisclosedTradeVolume_PresentQ(row)) {
4481 algo::Decimal_Print(row.NonDisclosedTradeVolume, temp);
4482 PrintAttrSpaceReset(str,"NonDisclosedTradeVolume", temp);
4483 }
4484}
4485
4486// --- emdi12.TradeEntryGrp..FastEncode
4487void emdi12::TradeEntryGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::TradeEntryGrp& parent) {
4488 int index = ary_N(buf);
4489 u64 pmap(0);
4490 // TrdType type none optional
4491 if (TrdType_PresentQ(parent)) {
4492 lib_fast::EncodeUnsigned(buf,parent.TrdType.value,true);
4493 } else {
4494 lib_fast::EncodeNull(buf);
4495 }
4496 // AlgorithmicTradeIndicator type default optional
4497 if (AlgorithmicTradeIndicator_PresentQ(parent)) {
4498 if (parent.AlgorithmicTradeIndicator.value != 0) {
4499 lib_fast::EncodeUnsigned(buf,parent.AlgorithmicTradeIndicator.value,true);
4500 lib_fast::SetPmapBit(pmap,0);
4501 }
4502 } else {
4503 lib_fast::EncodeNull(buf);
4504 lib_fast::SetPmapBit(pmap,0);
4505 }
4506 // TradeCondition type default optional
4507 if (TradeCondition_PresentQ(parent)) {
4508 if (parent.TradeCondition.value != 1) {
4509 lib_fast::EncodeUnsigned(buf,parent.TradeCondition.value,true);
4510 lib_fast::SetPmapBit(pmap,1);
4511 }
4512 } else {
4513 lib_fast::EncodeNull(buf);
4514 lib_fast::SetPmapBit(pmap,1);
4515 }
4516 // MultiLegReportingType type default optional
4517 if (MultiLegReportingType_PresentQ(parent)) {
4518 if (parent.MultiLegReportingType.value != 1) {
4519 lib_fast::EncodeUnsigned(buf,parent.MultiLegReportingType.value,true);
4520 lib_fast::SetPmapBit(pmap,2);
4521 }
4522 } else {
4523 lib_fast::EncodeNull(buf);
4524 lib_fast::SetPmapBit(pmap,2);
4525 }
4526 // MultiLegPriceModel type default optional
4527 if (MultiLegPriceModel_PresentQ(parent)) {
4528 if (parent.MultiLegPriceModel.value != 0) {
4529 lib_fast::EncodeUnsigned(buf,parent.MultiLegPriceModel.value,true);
4530 lib_fast::SetPmapBit(pmap,3);
4531 }
4532 } else {
4533 lib_fast::EncodeNull(buf);
4534 lib_fast::SetPmapBit(pmap,3);
4535 }
4536 // AggressorTime signed none optional
4537 if (AggressorTime_PresentQ(parent)) {
4538 lib_fast::EncodeSigned(buf,parent.AggressorTime,true);
4539 } else {
4540 lib_fast::EncodeNull(buf);
4541 }
4542 // RequestTime signed none optional
4543 if (RequestTime_PresentQ(parent)) {
4544 lib_fast::EncodeSigned(buf,parent.RequestTime,true);
4545 } else {
4546 lib_fast::EncodeNull(buf);
4547 }
4548 // AggressorSide type none optional
4549 if (AggressorSide_PresentQ(parent)) {
4550 lib_fast::EncodeUnsigned(buf,parent.AggressorSide.value,true);
4551 } else {
4552 lib_fast::EncodeNull(buf);
4553 }
4554 // NumberOfBuyOrders unsigned none optional
4555 if (NumberOfBuyOrders_PresentQ(parent)) {
4556 lib_fast::EncodeUnsigned(buf,parent.NumberOfBuyOrders,true);
4557 } else {
4558 lib_fast::EncodeNull(buf);
4559 }
4560 // NumberOfSellOrders unsigned none optional
4561 if (NumberOfSellOrders_PresentQ(parent)) {
4562 lib_fast::EncodeUnsigned(buf,parent.NumberOfSellOrders,true);
4563 } else {
4564 lib_fast::EncodeNull(buf);
4565 }
4566 // TotalNumOfTrades unsigned none optional
4567 if (TotalNumOfTrades_PresentQ(parent)) {
4568 lib_fast::EncodeUnsigned(buf,parent.TotalNumOfTrades,true);
4569 } else {
4570 lib_fast::EncodeNull(buf);
4571 }
4572 // RestingCxlQty scaled none optional
4573 if (RestingCxlQty_PresentQ(parent)) {
4574 lib_fast::EncodeScaled(buf,parent.RestingCxlQty,true);
4575 } else {
4576 lib_fast::EncodeNull(buf);
4577 }
4578 // MDEntryID unsigned delta optional
4579 if (!MDEntryID_AssignedQ(state)) {
4580 MDEntryID_SetAssigned(state);
4581 present_qSetBitVal(state,MDEntryID_Present_GetBit(state),MDEntryID_PresentQ(parent));
4582 state.MDEntryID = 0;
4583 }
4584 if (MDEntryID_PresentQ(parent)) {
4585 if (!MDEntryID_PresentQ(state)) {
4586 state.MDEntryID = 0;
4587 }
4588 lib_fast::EncodeDeltaUnsigned(buf,state.MDEntryID,parent.MDEntryID,true);
4589 } else {
4590 lib_fast::EncodeNull(buf);
4591 }
4592 state.MDEntryID = parent.MDEntryID;
4593 present_qSetBitVal(state,MDEntryID_Present_GetBit(state),MDEntryID_PresentQ(parent));
4594 // NonDisclosedTradeVolume scaled none optional
4595 if (NonDisclosedTradeVolume_PresentQ(parent)) {
4596 lib_fast::EncodeScaled(buf,parent.NonDisclosedTradeVolume,true);
4597 } else {
4598 lib_fast::EncodeNull(buf);
4599 }
4600 lib_fast::InsertPmap(buf,index,pmap);
4601}
4602
4603// --- emdi12.TradeEntryGrp..FastDecode
4604bool emdi12::TradeEntryGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::TradeEntryGrp& parent) {
4605 bool ok = true;
4606 u64 pmap;
4607 ok = lib_fast::DecodePmap(from,pmap);
4608 if (!ok) {
4609 state.error << "emdi12.TradeEntryGrp: bad pmap" << eol;
4610 }
4611 // TrdType type none optional
4612 if (ok) {
4613 bool prs = !lib_fast::DecodeNull(from);
4614 if (prs) {
4615 ok = lib_fast::DecodeUnsigned(from,parent.TrdType.value,true);
4616 if (!ok) {
4617 state.error << "emdi12.TradeEntryGrp.TrdType: bad Unsigned" << eol;
4618 }
4619 }
4620 pmask_qSetBitVal(parent,TrdType_Present_GetBit(parent),prs);
4621 }
4622 // AlgorithmicTradeIndicator type default optional
4623 if (ok) {
4624 bool prs = lib_fast::GetPmapBit(pmap,0);
4625 if (prs) {
4626 prs = !lib_fast::DecodeNull(from);
4627 if (prs) {
4628 ok = lib_fast::DecodeUnsigned(from,parent.AlgorithmicTradeIndicator.value,true);
4629 if (!ok) {
4630 state.error << "emdi12.TradeEntryGrp.AlgorithmicTradeIndicator: bad Unsigned" << eol;
4631 }
4632 }
4633 } else {
4634 parent.AlgorithmicTradeIndicator.value = 0;
4635 prs = true;
4636 }
4637 pmask_qSetBitVal(parent,AlgorithmicTradeIndicator_Present_GetBit(parent),prs);
4638 }
4639 // TradeCondition type default optional
4640 if (ok) {
4641 bool prs = lib_fast::GetPmapBit(pmap,1);
4642 if (prs) {
4643 prs = !lib_fast::DecodeNull(from);
4644 if (prs) {
4645 ok = lib_fast::DecodeUnsigned(from,parent.TradeCondition.value,true);
4646 if (!ok) {
4647 state.error << "emdi12.TradeEntryGrp.TradeCondition: bad Unsigned" << eol;
4648 }
4649 }
4650 } else {
4651 parent.TradeCondition.value = 1;
4652 prs = true;
4653 }
4654 pmask_qSetBitVal(parent,TradeCondition_Present_GetBit(parent),prs);
4655 }
4656 // MultiLegReportingType type default optional
4657 if (ok) {
4658 bool prs = lib_fast::GetPmapBit(pmap,2);
4659 if (prs) {
4660 prs = !lib_fast::DecodeNull(from);
4661 if (prs) {
4662 ok = lib_fast::DecodeUnsigned(from,parent.MultiLegReportingType.value,true);
4663 if (!ok) {
4664 state.error << "emdi12.TradeEntryGrp.MultiLegReportingType: bad Unsigned" << eol;
4665 }
4666 }
4667 } else {
4668 parent.MultiLegReportingType.value = 1;
4669 prs = true;
4670 }
4671 pmask_qSetBitVal(parent,MultiLegReportingType_Present_GetBit(parent),prs);
4672 }
4673 // MultiLegPriceModel type default optional
4674 if (ok) {
4675 bool prs = lib_fast::GetPmapBit(pmap,3);
4676 if (prs) {
4677 prs = !lib_fast::DecodeNull(from);
4678 if (prs) {
4679 ok = lib_fast::DecodeUnsigned(from,parent.MultiLegPriceModel.value,true);
4680 if (!ok) {
4681 state.error << "emdi12.TradeEntryGrp.MultiLegPriceModel: bad Unsigned" << eol;
4682 }
4683 }
4684 } else {
4685 parent.MultiLegPriceModel.value = 0;
4686 prs = true;
4687 }
4688 pmask_qSetBitVal(parent,MultiLegPriceModel_Present_GetBit(parent),prs);
4689 }
4690 // AggressorTime signed none optional
4691 if (ok) {
4692 bool prs = !lib_fast::DecodeNull(from);
4693 if (prs) {
4694 ok = lib_fast::DecodeSigned(from,parent.AggressorTime,true);
4695 if (!ok) {
4696 state.error << "emdi12.TradeEntryGrp.AggressorTime: bad Signed" << eol;
4697 }
4698 }
4699 pmask_qSetBitVal(parent,AggressorTime_Present_GetBit(parent),prs);
4700 }
4701 // RequestTime signed none optional
4702 if (ok) {
4703 bool prs = !lib_fast::DecodeNull(from);
4704 if (prs) {
4705 ok = lib_fast::DecodeSigned(from,parent.RequestTime,true);
4706 if (!ok) {
4707 state.error << "emdi12.TradeEntryGrp.RequestTime: bad Signed" << eol;
4708 }
4709 }
4710 pmask_qSetBitVal(parent,RequestTime_Present_GetBit(parent),prs);
4711 }
4712 // AggressorSide type none optional
4713 if (ok) {
4714 bool prs = !lib_fast::DecodeNull(from);
4715 if (prs) {
4716 ok = lib_fast::DecodeUnsigned(from,parent.AggressorSide.value,true);
4717 if (!ok) {
4718 state.error << "emdi12.TradeEntryGrp.AggressorSide: bad Unsigned" << eol;
4719 }
4720 }
4721 pmask_qSetBitVal(parent,AggressorSide_Present_GetBit(parent),prs);
4722 }
4723 // NumberOfBuyOrders unsigned none optional
4724 if (ok) {
4725 bool prs = !lib_fast::DecodeNull(from);
4726 if (prs) {
4727 ok = lib_fast::DecodeUnsigned(from,parent.NumberOfBuyOrders,true);
4728 if (!ok) {
4729 state.error << "emdi12.TradeEntryGrp.NumberOfBuyOrders: bad Unsigned" << eol;
4730 }
4731 }
4732 pmask_qSetBitVal(parent,NumberOfBuyOrders_Present_GetBit(parent),prs);
4733 }
4734 // NumberOfSellOrders unsigned none optional
4735 if (ok) {
4736 bool prs = !lib_fast::DecodeNull(from);
4737 if (prs) {
4738 ok = lib_fast::DecodeUnsigned(from,parent.NumberOfSellOrders,true);
4739 if (!ok) {
4740 state.error << "emdi12.TradeEntryGrp.NumberOfSellOrders: bad Unsigned" << eol;
4741 }
4742 }
4743 pmask_qSetBitVal(parent,NumberOfSellOrders_Present_GetBit(parent),prs);
4744 }
4745 // TotalNumOfTrades unsigned none optional
4746 if (ok) {
4747 bool prs = !lib_fast::DecodeNull(from);
4748 if (prs) {
4749 ok = lib_fast::DecodeUnsigned(from,parent.TotalNumOfTrades,true);
4750 if (!ok) {
4751 state.error << "emdi12.TradeEntryGrp.TotalNumOfTrades: bad Unsigned" << eol;
4752 }
4753 }
4754 pmask_qSetBitVal(parent,TotalNumOfTrades_Present_GetBit(parent),prs);
4755 }
4756 // RestingCxlQty scaled none optional
4757 if (ok) {
4758 bool prs = !lib_fast::DecodeNull(from);
4759 if (prs) {
4760 ok = lib_fast::DecodeScaled(from,parent.RestingCxlQty,true);
4761 if (!ok) {
4762 state.error << "emdi12.TradeEntryGrp.RestingCxlQty: bad Scaled" << eol;
4763 }
4764 }
4765 pmask_qSetBitVal(parent,RestingCxlQty_Present_GetBit(parent),prs);
4766 }
4767 // MDEntryID unsigned delta optional
4768 if (ok) {
4769 if (!MDEntryID_AssignedQ(state)) {
4770 MDEntryID_SetAssigned(state);
4771 bool prs(true);
4772 present_qSetBitVal(state,MDEntryID_Present_GetBit(state),prs);
4773 state.MDEntryID = 0;
4774 }
4775 bool prs = !lib_fast::DecodeNull(from);
4776 if (prs) {
4777 if (!MDEntryID_PresentQ(state)) {
4778 state.MDEntryID = 0;
4779 }
4780 ok = lib_fast::DecodeDeltaUnsigned(from,state.MDEntryID,parent.MDEntryID,true);
4781 if (!ok) {
4782 state.error << "emdi12.TradeEntryGrp.MDEntryID: bad Unsigned delta" << eol;
4783 }
4784 state.MDEntryID = parent.MDEntryID;
4785 }
4786 pmask_qSetBitVal(parent,MDEntryID_Present_GetBit(parent),prs);
4787 present_qSetBitVal(state,MDEntryID_Present_GetBit(state),prs);
4788 }
4789 // NonDisclosedTradeVolume scaled none optional
4790 if (ok) {
4791 bool prs = !lib_fast::DecodeNull(from);
4792 if (prs) {
4793 ok = lib_fast::DecodeScaled(from,parent.NonDisclosedTradeVolume,true);
4794 if (!ok) {
4795 state.error << "emdi12.TradeEntryGrp.NonDisclosedTradeVolume: bad Scaled" << eol;
4796 }
4797 }
4798 pmask_qSetBitVal(parent,NonDisclosedTradeVolume_Present_GetBit(parent),prs);
4799 }
4800 return ok;
4801}
4802
4803// --- emdi12.TradeEntryGrp..FixEncode
4804void emdi12::TradeEntryGrp_FixEncode(cstring& buf, emdi12::TradeEntryGrp& parent, char soh) {
4805 if (TrdType_PresentQ(parent)) {
4806 buf << "828=" << parent.TrdType << soh;
4807 }
4808 if (AlgorithmicTradeIndicator_PresentQ(parent)) {
4809 buf << "2667=" << parent.AlgorithmicTradeIndicator << soh;
4810 }
4811 if (TradeCondition_PresentQ(parent)) {
4812 buf << "277=" << parent.TradeCondition << soh;
4813 }
4814 if (MultiLegReportingType_PresentQ(parent)) {
4815 buf << "442=" << parent.MultiLegReportingType << soh;
4816 }
4817 if (MultiLegPriceModel_PresentQ(parent)) {
4818 buf << "28750=" << parent.MultiLegPriceModel << soh;
4819 }
4820 if (AggressorTime_PresentQ(parent)) {
4821 buf << "2445=" << parent.AggressorTime << soh;
4822 }
4823 if (RequestTime_PresentQ(parent)) {
4824 buf << "5979=" << parent.RequestTime << soh;
4825 }
4826 if (AggressorSide_PresentQ(parent)) {
4827 buf << "2446=" << parent.AggressorSide << soh;
4828 }
4829 if (NumberOfBuyOrders_PresentQ(parent)) {
4830 buf << "2449=" << parent.NumberOfBuyOrders << soh;
4831 }
4832 if (NumberOfSellOrders_PresentQ(parent)) {
4833 buf << "2450=" << parent.NumberOfSellOrders << soh;
4834 }
4835 if (TotalNumOfTrades_PresentQ(parent)) {
4836 buf << "6139=" << parent.TotalNumOfTrades << soh;
4837 }
4838 if (RestingCxlQty_PresentQ(parent)) {
4839 buf << "28869=" << parent.RestingCxlQty << soh;
4840 }
4841 if (MDEntryID_PresentQ(parent)) {
4842 buf << "278=" << parent.MDEntryID << soh;
4843 }
4844 if (NonDisclosedTradeVolume_PresentQ(parent)) {
4845 buf << "28873=" << parent.NonDisclosedTradeVolume << soh;
4846 }
4847}
4848
4849// --- emdi12.MDIncGrp1.MDOriginType.ReadStrptrMaybe
4850inline static bool emdi12::MDOriginType_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4851 bool retval = true;
4852 retval = emdi12::MDOriginType_ReadStrptrMaybe(parent.MDOriginType, in_str);
4853 return retval;
4854}
4855
4856// --- emdi12.MDIncGrp1.MDUpdateAction.ReadStrptrMaybe
4857inline static bool emdi12::MDUpdateAction_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4858 bool retval = true;
4859 retval = emdi12::MDUpdateAction_ReadStrptrMaybe(parent.MDUpdateAction, in_str);
4860 return retval;
4861}
4862
4863// --- emdi12.MDIncGrp1.MDEntryType.ReadStrptrMaybe
4864inline static bool emdi12::MDEntryType_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4865 bool retval = true;
4866 retval = emdi12::MDEntryType_ReadStrptrMaybe(parent.MDEntryType, in_str);
4867 return retval;
4868}
4869
4870// --- emdi12.MDIncGrp1.SecurityID.ReadStrptrMaybe
4871inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4872 bool retval = true;
4873 retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
4874 return retval;
4875}
4876
4877// --- emdi12.MDIncGrp1.MDEntryPx.ReadStrptrMaybe
4878inline static bool emdi12::MDEntryPx_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4879 bool retval = true;
4880 algo::Decimal MDEntryPx_tmp;
4881 retval = algo::Decimal_ReadStrptrMaybe(MDEntryPx_tmp, in_str);
4882 if (retval) {
4883 MDEntryPx_Set(parent, MDEntryPx_tmp);
4884 }
4885 return retval;
4886}
4887
4888// --- emdi12.MDIncGrp1.MDEntrySize.ReadStrptrMaybe
4889inline static bool emdi12::MDEntrySize_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4890 bool retval = true;
4891 algo::Decimal MDEntrySize_tmp;
4892 retval = algo::Decimal_ReadStrptrMaybe(MDEntrySize_tmp, in_str);
4893 if (retval) {
4894 MDEntrySize_Set(parent, MDEntrySize_tmp);
4895 }
4896 return retval;
4897}
4898
4899// --- emdi12.MDIncGrp1.NumberOfOrders.ReadStrptrMaybe
4900inline static bool emdi12::NumberOfOrders_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4901 bool retval = true;
4902 u32 NumberOfOrders_tmp;
4903 retval = u32_ReadStrptrMaybe(NumberOfOrders_tmp, in_str);
4904 if (retval) {
4905 NumberOfOrders_Set(parent, NumberOfOrders_tmp);
4906 }
4907 return retval;
4908}
4909
4910// --- emdi12.MDIncGrp1.MDPriceLevel.ReadStrptrMaybe
4911inline static bool emdi12::MDPriceLevel_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4912 bool retval = true;
4913 u32 MDPriceLevel_tmp;
4914 retval = u32_ReadStrptrMaybe(MDPriceLevel_tmp, in_str);
4915 if (retval) {
4916 MDPriceLevel_Set(parent, MDPriceLevel_tmp);
4917 }
4918 return retval;
4919}
4920
4921// --- emdi12.MDIncGrp1.MDEntryTime.ReadStrptrMaybe
4922inline static bool emdi12::MDEntryTime_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4923 bool retval = true;
4924 i64 MDEntryTime_tmp;
4925 retval = i64_ReadStrptrMaybe(MDEntryTime_tmp, in_str);
4926 if (retval) {
4927 MDEntryTime_Set(parent, MDEntryTime_tmp);
4928 }
4929 return retval;
4930}
4931
4932// --- emdi12.MDIncGrp1.PotentialSecurityTradingEvent.ReadStrptrMaybe
4933inline static bool emdi12::PotentialSecurityTradingEvent_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4934 bool retval = true;
4935 emdi12::SecurityTradingEvent PotentialSecurityTradingEvent_tmp;
4936 retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(PotentialSecurityTradingEvent_tmp, in_str);
4937 if (retval) {
4938 PotentialSecurityTradingEvent_Set(parent, PotentialSecurityTradingEvent_tmp);
4939 }
4940 return retval;
4941}
4942
4943// --- emdi12.MDIncGrp1.QuoteCondition.ReadStrptrMaybe
4944inline static bool emdi12::QuoteCondition_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4945 bool retval = true;
4946 emdi12::QuoteCondition QuoteCondition_tmp;
4947 retval = emdi12::QuoteCondition_ReadStrptrMaybe(QuoteCondition_tmp, in_str);
4948 if (retval) {
4949 QuoteCondition_Set(parent, QuoteCondition_tmp);
4950 }
4951 return retval;
4952}
4953
4954// --- emdi12.MDIncGrp1.TradeEntryGrp.ReadStrptrMaybe
4955inline static bool emdi12::TradeEntryGrp_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
4956 bool retval = true;
4957 emdi12::TradeEntryGrp TradeEntryGrp_tmp;
4958 retval = emdi12::TradeEntryGrp_ReadStrptrMaybe(TradeEntryGrp_tmp, in_str);
4959 if (retval) {
4960 TradeEntryGrp_Set(parent, TradeEntryGrp_tmp);
4961 }
4962 return retval;
4963}
4964
4965// --- emdi12.MDIncGrp1.pmask_bitcurs.Next
4966// proceed to next item
4967void emdi12::MDIncGrp1_pmask_bitcurs_Next(MDIncGrp1_pmask_bitcurs &curs) {
4968 ++curs.bit;
4969 int index = curs.bit / 32;
4970 int offset = curs.bit % 32;
4971 for (; index < curs.n_elems; ++index, offset = 0) {
4972 u64 rest = curs.elems[index] >> offset;
4973 if (rest) {
4974 offset += algo::u64_BitScanForward(rest);
4975 break;
4976 }
4977 }
4978 curs.bit = index * 32 + offset;
4979}
4980
4981// --- emdi12.MDIncGrp1..ReadFieldMaybe
4982bool emdi12::MDIncGrp1_ReadFieldMaybe(emdi12::MDIncGrp1& parent, algo::strptr field, algo::strptr strval) {
4983 bool retval = true;
4984 emdi12::FieldId field_id;
4985 (void)value_SetStrptrMaybe(field_id,field);
4986 switch(field_id) {
4987 case emdi12_FieldId_pmask: {
4988 retval = false;
4989 break;
4990 }
4991 case emdi12_FieldId_MDOriginType: {
4992 retval = MDOriginType_ReadStrptrMaybe(parent, strval);
4993 break;
4994 }
4995 case emdi12_FieldId_MDUpdateAction: {
4996 retval = MDUpdateAction_ReadStrptrMaybe(parent, strval);
4997 break;
4998 }
4999 case emdi12_FieldId_MDEntryType: {
5000 retval = MDEntryType_ReadStrptrMaybe(parent, strval);
5001 break;
5002 }
5003 case emdi12_FieldId_SecurityID: {
5004 retval = SecurityID_ReadStrptrMaybe(parent, strval);
5005 break;
5006 }
5007 case emdi12_FieldId_SecurityIDSource: {
5008 retval = true;
5009 break;
5010 }
5011 case emdi12_FieldId_MDEntryPx: {
5012 retval = MDEntryPx_ReadStrptrMaybe(parent, strval);
5013 if (retval) {
5014 pmask_qSetBit(parent, 0);
5015 }
5016 break;
5017 }
5018 case emdi12_FieldId_MDEntrySize: {
5019 retval = MDEntrySize_ReadStrptrMaybe(parent, strval);
5020 if (retval) {
5021 pmask_qSetBit(parent, 1);
5022 }
5023 break;
5024 }
5025 case emdi12_FieldId_NumberOfOrders: {
5026 retval = NumberOfOrders_ReadStrptrMaybe(parent, strval);
5027 if (retval) {
5028 pmask_qSetBit(parent, 4);
5029 }
5030 break;
5031 }
5032 case emdi12_FieldId_MDPriceLevel: {
5033 retval = MDPriceLevel_ReadStrptrMaybe(parent, strval);
5034 if (retval) {
5035 pmask_qSetBit(parent, 3);
5036 }
5037 break;
5038 }
5039 case emdi12_FieldId_MDEntryTime: {
5040 retval = MDEntryTime_ReadStrptrMaybe(parent, strval);
5041 if (retval) {
5042 pmask_qSetBit(parent, 2);
5043 }
5044 break;
5045 }
5046 case emdi12_FieldId_PotentialSecurityTradingEvent: {
5047 retval = PotentialSecurityTradingEvent_ReadStrptrMaybe(parent, strval);
5048 if (retval) {
5049 pmask_qSetBit(parent, 5);
5050 }
5051 break;
5052 }
5053 case emdi12_FieldId_QuoteCondition: {
5054 retval = QuoteCondition_ReadStrptrMaybe(parent, strval);
5055 if (retval) {
5056 pmask_qSetBit(parent, 6);
5057 }
5058 break;
5059 }
5060 case emdi12_FieldId_TradeEntryGrp: {
5061 retval = TradeEntryGrp_ReadStrptrMaybe(parent, strval);
5062 if (retval) {
5063 pmask_qSetBit(parent, 7);
5064 }
5065 break;
5066 }
5067 default: break;
5068 }
5069 if (!retval) {
5070 algo_lib::AppendErrtext("attr",field);
5071 }
5072 return retval;
5073}
5074
5075// --- emdi12.MDIncGrp1..ReadStrptrMaybe
5076// Read fields of emdi12::MDIncGrp1 from an ascii string.
5077// The format of the string is an ssim Tuple
5078bool emdi12::MDIncGrp1_ReadStrptrMaybe(emdi12::MDIncGrp1 &parent, algo::strptr in_str) {
5079 bool retval = true;
5080 retval = algo::StripTypeTag(in_str, "emdi12.MDIncGrp1");
5081 ind_beg(algo::Attr_curs, attr, in_str) {
5082 retval = retval && MDIncGrp1_ReadFieldMaybe(parent, attr.name, attr.value);
5083 }ind_end;
5084 return retval;
5085}
5086
5087// --- emdi12.MDIncGrp1..Init
5088// Set all fields to initial values.
5089void emdi12::MDIncGrp1_Init(emdi12::MDIncGrp1& MDIncGrp1) {
5090 MDIncGrp1.pmask = u32(0);
5091 MDIncGrp1.MDOriginType = emdi12_MDOriginTypeEnum(0);
5092 MDIncGrp1.SecurityID = i64(0);
5093 MDIncGrp1.MDEntryPx = algo::Decimal(algo::Decimal(0,0));
5094 MDIncGrp1.MDEntrySize = algo::Decimal(algo::Decimal(0,0));
5095 MDIncGrp1.NumberOfOrders = u32(0);
5096 MDIncGrp1.MDPriceLevel = u32(0);
5097 MDIncGrp1.MDEntryTime = i64(0);
5098}
5099
5100// --- emdi12.MDIncGrp1..Print
5101// print string representation of ROW to string STR
5102// cfmt:emdi12.MDIncGrp1.String printfmt:Tuple
5103void emdi12::MDIncGrp1_Print(emdi12::MDIncGrp1& row, algo::cstring& str) {
5104 algo::tempstr temp;
5105 str << "emdi12.MDIncGrp1";
5106
5107 emdi12::MDOriginType_Print(row.MDOriginType, temp);
5108 PrintAttrSpaceReset(str,"MDOriginType", temp);
5109
5110 emdi12::MDUpdateAction_Print(row.MDUpdateAction, temp);
5111 PrintAttrSpaceReset(str,"MDUpdateAction", temp);
5112
5113 emdi12::MDEntryType_Print(row.MDEntryType, temp);
5114 PrintAttrSpaceReset(str,"MDEntryType", temp);
5115
5116 i64_Print(row.SecurityID, temp);
5117 PrintAttrSpaceReset(str,"SecurityID", temp);
5118
5119 algo::strptr_Print(SecurityIDSource_Get(row), temp);
5120 PrintAttrSpaceReset(str,"SecurityIDSource", temp);
5121
5122 if (MDEntryPx_PresentQ(row)) {
5123 algo::Decimal_Print(row.MDEntryPx, temp);
5124 PrintAttrSpaceReset(str,"MDEntryPx", temp);
5125 }
5126
5127 if (MDEntrySize_PresentQ(row)) {
5128 algo::Decimal_Print(row.MDEntrySize, temp);
5129 PrintAttrSpaceReset(str,"MDEntrySize", temp);
5130 }
5131
5132 if (NumberOfOrders_PresentQ(row)) {
5133 u32_Print(row.NumberOfOrders, temp);
5134 PrintAttrSpaceReset(str,"NumberOfOrders", temp);
5135 }
5136
5137 if (MDPriceLevel_PresentQ(row)) {
5138 u32_Print(row.MDPriceLevel, temp);
5139 PrintAttrSpaceReset(str,"MDPriceLevel", temp);
5140 }
5141
5142 if (MDEntryTime_PresentQ(row)) {
5143 i64_Print(row.MDEntryTime, temp);
5144 PrintAttrSpaceReset(str,"MDEntryTime", temp);
5145 }
5146
5147 if (PotentialSecurityTradingEvent_PresentQ(row)) {
5148 emdi12::SecurityTradingEvent_Print(row.PotentialSecurityTradingEvent, temp);
5149 PrintAttrSpaceReset(str,"PotentialSecurityTradingEvent", temp);
5150 }
5151
5152 if (QuoteCondition_PresentQ(row)) {
5153 emdi12::QuoteCondition_Print(row.QuoteCondition, temp);
5154 PrintAttrSpaceReset(str,"QuoteCondition", temp);
5155 }
5156
5157 if (TradeEntryGrp_PresentQ(row)) {
5158 emdi12::TradeEntryGrp_Print(row.TradeEntryGrp, temp);
5159 PrintAttrSpaceReset(str,"TradeEntryGrp", temp);
5160 }
5161}
5162
5163// --- emdi12.MDIncGrp1..FastEncode
5164void emdi12::MDIncGrp1_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MDIncGrp1& parent) {
5165 int index = ary_N(buf);
5166 u64 pmap(0);
5167 // MDOriginType type default mandatory
5168 if (parent.MDOriginType.value != 0) {
5169 lib_fast::EncodeUnsigned(buf,parent.MDOriginType.value,false);
5170 lib_fast::SetPmapBit(pmap,0);
5171 }
5172 // MDUpdateAction type copy mandatory
5173 if (!MDUpdateAction_AssignedQ(state) || parent.MDUpdateAction.value != state.MDUpdateAction.value) {
5174 lib_fast::EncodeUnsigned(buf,parent.MDUpdateAction.value,false);
5175 lib_fast::SetPmapBit(pmap,1);
5176 }
5177 state.MDUpdateAction.value = parent.MDUpdateAction.value;
5178 MDUpdateAction_SetAssigned(state);
5179 // MDEntryType type copy mandatory
5180 if (!MDEntryType_AssignedQ(state) || parent.MDEntryType.value != state.MDEntryType.value) {
5181 lib_fast::EncodeUnsigned(buf,parent.MDEntryType.value,false);
5182 lib_fast::SetPmapBit(pmap,2);
5183 }
5184 state.MDEntryType.value = parent.MDEntryType.value;
5185 MDEntryType_SetAssigned(state);
5186 // SecurityID signed copy mandatory
5187 if (!SecurityID_AssignedQ(state) || parent.SecurityID != state.SecurityID) {
5188 lib_fast::EncodeSigned(buf,parent.SecurityID,false);
5189 lib_fast::SetPmapBit(pmap,3);
5190 }
5191 state.SecurityID = parent.SecurityID;
5192 SecurityID_SetAssigned(state);
5193 // SecurityIDSource string constant mandatory
5194 // MDEntryPx scaled delta optional
5195 if (!MDEntryPx_AssignedQ(state)) {
5196 MDEntryPx_SetAssigned(state);
5197 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
5198 state.MDEntryPx = algo::Decimal(0,0);
5199 }
5200 if (MDEntryPx_PresentQ(parent)) {
5201 if (!MDEntryPx_PresentQ(state)) {
5202 state.MDEntryPx = algo::Decimal(0,0);
5203 }
5204 lib_fast::EncodeDeltaScaled(buf,state.MDEntryPx,parent.MDEntryPx,true);
5205 } else {
5206 lib_fast::EncodeNull(buf);
5207 }
5208 state.MDEntryPx = parent.MDEntryPx;
5209 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
5210 // MDEntrySize scaled delta optional
5211 if (!MDEntrySize_AssignedQ(state)) {
5212 MDEntrySize_SetAssigned(state);
5213 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
5214 state.MDEntrySize = algo::Decimal(0,0);
5215 }
5216 if (MDEntrySize_PresentQ(parent)) {
5217 if (!MDEntrySize_PresentQ(state)) {
5218 state.MDEntrySize = algo::Decimal(0,0);
5219 }
5220 lib_fast::EncodeDeltaScaled(buf,state.MDEntrySize,parent.MDEntrySize,true);
5221 } else {
5222 lib_fast::EncodeNull(buf);
5223 }
5224 state.MDEntrySize = parent.MDEntrySize;
5225 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
5226 // NumberOfOrders unsigned delta optional
5227 if (!NumberOfOrders_AssignedQ(state)) {
5228 NumberOfOrders_SetAssigned(state);
5229 present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),NumberOfOrders_PresentQ(parent));
5230 state.NumberOfOrders = 0;
5231 }
5232 if (NumberOfOrders_PresentQ(parent)) {
5233 if (!NumberOfOrders_PresentQ(state)) {
5234 state.NumberOfOrders = 0;
5235 }
5236 lib_fast::EncodeDeltaUnsigned(buf,state.NumberOfOrders,parent.NumberOfOrders,true);
5237 } else {
5238 lib_fast::EncodeNull(buf);
5239 }
5240 state.NumberOfOrders = parent.NumberOfOrders;
5241 present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),NumberOfOrders_PresentQ(parent));
5242 // MDPriceLevel unsigned none optional
5243 if (MDPriceLevel_PresentQ(parent)) {
5244 lib_fast::EncodeUnsigned(buf,parent.MDPriceLevel,true);
5245 } else {
5246 lib_fast::EncodeNull(buf);
5247 }
5248 // MDEntryTime signed copy optional
5249 if (MDEntryTime_PresentQ(parent)) {
5250 if (!MDEntryTime_AssignedQ(state) || !MDEntryTime_PresentQ(state) || parent.MDEntryTime != state.MDEntryTime ) {
5251 lib_fast::EncodeSigned(buf,parent.MDEntryTime,true);
5252 lib_fast::SetPmapBit(pmap,4);
5253 }
5254 } else {
5255 if (MDEntryTime_AssignedQ(state)) {
5256 lib_fast::EncodeNull(buf);
5257 lib_fast::SetPmapBit(pmap,4);
5258 }
5259 }
5260 state.MDEntryTime = parent.MDEntryTime;
5261 present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),MDEntryTime_PresentQ(parent));
5262 MDEntryTime_SetAssigned(state);
5263 // PotentialSecurityTradingEvent type none optional
5264 if (PotentialSecurityTradingEvent_PresentQ(parent)) {
5265 lib_fast::EncodeUnsigned(buf,parent.PotentialSecurityTradingEvent.value,true);
5266 } else {
5267 lib_fast::EncodeNull(buf);
5268 }
5269 // QuoteCondition type none optional
5270 if (QuoteCondition_PresentQ(parent)) {
5271 lib_fast::EncodeUnsigned(buf,parent.QuoteCondition.value,true);
5272 } else {
5273 lib_fast::EncodeNull(buf);
5274 }
5275 // TradeEntryGrp group none optional
5276 if (TradeEntryGrp_PresentQ(parent)) {
5277 TradeEntryGrp_FastEncode(buf,state,parent.TradeEntryGrp);
5278 lib_fast::SetPmapBit(pmap,5);
5279 }
5280 lib_fast::InsertPmap(buf,index,pmap);
5281}
5282
5283// --- emdi12.MDIncGrp1..FastDecode
5284bool emdi12::MDIncGrp1_FastDecode(algo::memptr& from, FastState& state, emdi12::MDIncGrp1& parent) {
5285 bool ok = true;
5286 u64 pmap;
5287 ok = lib_fast::DecodePmap(from,pmap);
5288 if (!ok) {
5289 state.error << "emdi12.MDIncGrp1: bad pmap" << eol;
5290 }
5291 // MDOriginType type default mandatory
5292 if (ok) {
5293 bool prs = lib_fast::GetPmapBit(pmap,0);
5294 if (prs) {
5295 ok = lib_fast::DecodeUnsigned(from,parent.MDOriginType.value,false);
5296 if (!ok) {
5297 state.error << "emdi12.MDIncGrp1.MDOriginType: bad Unsigned" << eol;
5298 }
5299 } else {
5300 parent.MDOriginType.value = 0;
5301 }
5302 }
5303 // MDUpdateAction type copy mandatory
5304 if (ok) {
5305 bool prs = lib_fast::GetPmapBit(pmap,1);
5306 if (prs) {
5307 ok = lib_fast::DecodeUnsigned(from,parent.MDUpdateAction.value,false);
5308 if (!ok) {
5309 state.error << "emdi12.MDIncGrp1.MDUpdateAction: bad Unsigned" << eol;
5310 }
5311 } else if (MDUpdateAction_AssignedQ(state)) {
5312 parent.MDUpdateAction.value = state.MDUpdateAction.value;
5313 } else {
5314 ok = false;
5315 state.error << "emdi12.MDIncGrp1.MDUpdateAction: copy operator: previous value unassigned" << eol;
5316 }
5317 MDUpdateAction_SetAssigned(state);
5318 state.MDUpdateAction.value = parent.MDUpdateAction.value;
5319 }
5320 // MDEntryType type copy mandatory
5321 if (ok) {
5322 bool prs = lib_fast::GetPmapBit(pmap,2);
5323 if (prs) {
5324 ok = lib_fast::DecodeUnsigned(from,parent.MDEntryType.value,false);
5325 if (!ok) {
5326 state.error << "emdi12.MDIncGrp1.MDEntryType: bad Unsigned" << eol;
5327 }
5328 } else if (MDEntryType_AssignedQ(state)) {
5329 parent.MDEntryType.value = state.MDEntryType.value;
5330 } else {
5331 ok = false;
5332 state.error << "emdi12.MDIncGrp1.MDEntryType: copy operator: previous value unassigned" << eol;
5333 }
5334 MDEntryType_SetAssigned(state);
5335 state.MDEntryType.value = parent.MDEntryType.value;
5336 }
5337 // SecurityID signed copy mandatory
5338 if (ok) {
5339 bool prs = lib_fast::GetPmapBit(pmap,3);
5340 if (prs) {
5341 ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
5342 if (!ok) {
5343 state.error << "emdi12.MDIncGrp1.SecurityID: bad Signed" << eol;
5344 }
5345 } else if (SecurityID_AssignedQ(state)) {
5346 parent.SecurityID = state.SecurityID;
5347 } else {
5348 ok = false;
5349 state.error << "emdi12.MDIncGrp1.SecurityID: copy operator: previous value unassigned" << eol;
5350 }
5351 SecurityID_SetAssigned(state);
5352 state.SecurityID = parent.SecurityID;
5353 }
5354 // SecurityIDSource string constant mandatory
5355 if (ok) {
5356 }
5357 // MDEntryPx scaled delta optional
5358 if (ok) {
5359 if (!MDEntryPx_AssignedQ(state)) {
5360 MDEntryPx_SetAssigned(state);
5361 bool prs(true);
5362 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
5363 state.MDEntryPx = algo::Decimal(0,0);
5364 }
5365 bool prs = !lib_fast::DecodeNull(from);
5366 if (prs) {
5367 if (!MDEntryPx_PresentQ(state)) {
5368 state.MDEntryPx = algo::Decimal(0,0);
5369 }
5370 ok = lib_fast::DecodeDeltaScaled(from,state.MDEntryPx,parent.MDEntryPx,true);
5371 if (!ok) {
5372 state.error << "emdi12.MDIncGrp1.MDEntryPx: bad Scaled delta" << eol;
5373 }
5374 state.MDEntryPx = parent.MDEntryPx;
5375 }
5376 pmask_qSetBitVal(parent,MDEntryPx_Present_GetBit(parent),prs);
5377 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
5378 }
5379 // MDEntrySize scaled delta optional
5380 if (ok) {
5381 if (!MDEntrySize_AssignedQ(state)) {
5382 MDEntrySize_SetAssigned(state);
5383 bool prs(true);
5384 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
5385 state.MDEntrySize = algo::Decimal(0,0);
5386 }
5387 bool prs = !lib_fast::DecodeNull(from);
5388 if (prs) {
5389 if (!MDEntrySize_PresentQ(state)) {
5390 state.MDEntrySize = algo::Decimal(0,0);
5391 }
5392 ok = lib_fast::DecodeDeltaScaled(from,state.MDEntrySize,parent.MDEntrySize,true);
5393 if (!ok) {
5394 state.error << "emdi12.MDIncGrp1.MDEntrySize: bad Scaled delta" << eol;
5395 }
5396 state.MDEntrySize = parent.MDEntrySize;
5397 }
5398 pmask_qSetBitVal(parent,MDEntrySize_Present_GetBit(parent),prs);
5399 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
5400 }
5401 // NumberOfOrders unsigned delta optional
5402 if (ok) {
5403 if (!NumberOfOrders_AssignedQ(state)) {
5404 NumberOfOrders_SetAssigned(state);
5405 bool prs(true);
5406 present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),prs);
5407 state.NumberOfOrders = 0;
5408 }
5409 bool prs = !lib_fast::DecodeNull(from);
5410 if (prs) {
5411 if (!NumberOfOrders_PresentQ(state)) {
5412 state.NumberOfOrders = 0;
5413 }
5414 ok = lib_fast::DecodeDeltaUnsigned(from,state.NumberOfOrders,parent.NumberOfOrders,true);
5415 if (!ok) {
5416 state.error << "emdi12.MDIncGrp1.NumberOfOrders: bad Unsigned delta" << eol;
5417 }
5418 state.NumberOfOrders = parent.NumberOfOrders;
5419 }
5420 pmask_qSetBitVal(parent,NumberOfOrders_Present_GetBit(parent),prs);
5421 present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),prs);
5422 }
5423 // MDPriceLevel unsigned none optional
5424 if (ok) {
5425 bool prs = !lib_fast::DecodeNull(from);
5426 if (prs) {
5427 ok = lib_fast::DecodeUnsigned(from,parent.MDPriceLevel,true);
5428 if (!ok) {
5429 state.error << "emdi12.MDIncGrp1.MDPriceLevel: bad Unsigned" << eol;
5430 }
5431 }
5432 pmask_qSetBitVal(parent,MDPriceLevel_Present_GetBit(parent),prs);
5433 }
5434 // MDEntryTime signed copy optional
5435 if (ok) {
5436 bool prs = lib_fast::GetPmapBit(pmap,4);
5437 if (prs) {
5438 prs = !lib_fast::DecodeNull(from);
5439 if (prs) {
5440 ok = lib_fast::DecodeSigned(from,parent.MDEntryTime,true);
5441 if (!ok) {
5442 state.error << "emdi12.MDIncGrp1.MDEntryTime: bad Signed" << eol;
5443 }
5444 }
5445 } else if (MDEntryTime_AssignedQ(state)) {
5446 parent.MDEntryTime = state.MDEntryTime;
5447 prs = MDEntryTime_PresentQ(state);
5448 } else {
5449 prs = false;
5450 }
5451 pmask_qSetBitVal(parent,MDEntryTime_Present_GetBit(parent),prs);
5452 MDEntryTime_SetAssigned(state);
5453 present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),prs);
5454 state.MDEntryTime = parent.MDEntryTime;
5455 }
5456 // PotentialSecurityTradingEvent type none optional
5457 if (ok) {
5458 bool prs = !lib_fast::DecodeNull(from);
5459 if (prs) {
5460 ok = lib_fast::DecodeUnsigned(from,parent.PotentialSecurityTradingEvent.value,true);
5461 if (!ok) {
5462 state.error << "emdi12.MDIncGrp1.PotentialSecurityTradingEvent: bad Unsigned" << eol;
5463 }
5464 }
5465 pmask_qSetBitVal(parent,PotentialSecurityTradingEvent_Present_GetBit(parent),prs);
5466 }
5467 // QuoteCondition type none optional
5468 if (ok) {
5469 bool prs = !lib_fast::DecodeNull(from);
5470 if (prs) {
5471 ok = lib_fast::DecodeUnsigned(from,parent.QuoteCondition.value,true);
5472 if (!ok) {
5473 state.error << "emdi12.MDIncGrp1.QuoteCondition: bad Unsigned" << eol;
5474 }
5475 }
5476 pmask_qSetBitVal(parent,QuoteCondition_Present_GetBit(parent),prs);
5477 }
5478 // TradeEntryGrp group none optional
5479 if (ok) {
5480 bool prs = lib_fast::GetPmapBit(pmap,5);
5481 pmask_qSetBitVal(parent,TradeEntryGrp_Present_GetBit(parent),prs);
5482 if (prs) {
5483 ok = TradeEntryGrp_FastDecode(from,state,parent.TradeEntryGrp);
5484 }
5485 }
5486 return ok;
5487}
5488
5489// --- emdi12.MDIncGrp1..FixEncode
5490void emdi12::MDIncGrp1_FixEncode(cstring& buf, emdi12::MDIncGrp1& parent, char soh) {
5491 buf << "1024=" << parent.MDOriginType << soh;
5492 buf << "279=" << parent.MDUpdateAction << soh;
5493 buf << "269=" << parent.MDEntryType << soh;
5494 buf << "48=" << parent.SecurityID << soh;
5495 buf << "22=" << SecurityIDSource_Get(parent) << soh;
5496 if (MDEntryPx_PresentQ(parent)) {
5497 buf << "270=" << parent.MDEntryPx << soh;
5498 }
5499 if (MDEntrySize_PresentQ(parent)) {
5500 buf << "271=" << parent.MDEntrySize << soh;
5501 }
5502 if (NumberOfOrders_PresentQ(parent)) {
5503 buf << "346=" << parent.NumberOfOrders << soh;
5504 }
5505 if (MDPriceLevel_PresentQ(parent)) {
5506 buf << "1023=" << parent.MDPriceLevel << soh;
5507 }
5508 if (MDEntryTime_PresentQ(parent)) {
5509 buf << "273=" << parent.MDEntryTime << soh;
5510 }
5511 if (PotentialSecurityTradingEvent_PresentQ(parent)) {
5512 buf << "28872=" << parent.PotentialSecurityTradingEvent << soh;
5513 }
5514 if (QuoteCondition_PresentQ(parent)) {
5515 buf << "276=" << parent.QuoteCondition << soh;
5516 }
5517 if (TradeEntryGrp_PresentQ(parent)) {
5518 TradeEntryGrp_FixEncode(buf,parent.TradeEntryGrp,soh);
5519 }
5520}
5521
5522// --- emdi12.DepthIncremental.base.CopyOut
5523// Copy fields out of row
5524void emdi12::parent_CopyOut(emdi12::DepthIncremental &row, emdi12::TemplateHeader &out) {
5525 // length: field value is computed
5526 // id: field value is computed
5527 (void)row;//only to avoid -Wunused-parameter
5528 (void)out;//only to avoid -Wunused-parameter
5529}
5530
5531// --- emdi12.DepthIncremental.MDIncGrp1.Getary
5532// Access var-length portion as an aryptr. Length is determined from one of the fields.
5533algo::aryptr<emdi12::MDIncGrp1> emdi12::MDIncGrp1_Getary(emdi12::DepthIncremental& parent) {
5534 return algo::aryptr<emdi12::MDIncGrp1>(MDIncGrp1_Addr(parent), MDIncGrp1_N(parent));
5535}
5536
5537// --- emdi12.DepthIncremental.MDIncGrp1.Addr
5538emdi12::MDIncGrp1* emdi12::MDIncGrp1_Addr(emdi12::DepthIncremental& parent) {
5539 return (emdi12::MDIncGrp1*)((u8*)&parent + sizeof(emdi12::DepthIncremental)); // address of varlen portion
5540}
5541
5542// --- emdi12.DepthIncremental.MDIncGrp1.ReadStrptrMaybe
5543// Convert string to field. Return success value
5544bool emdi12::MDIncGrp1_ReadStrptrMaybe(emdi12::DepthIncremental& parent, algo::strptr in_str) {
5545 bool retval = true;
5546 if (algo_lib::_db.varlenbuf) {
5547 emdi12::MDIncGrp1 *MDIncGrp1_tmp = new(ary_AllocN(*algo_lib::_db.varlenbuf, sizeof(emdi12::MDIncGrp1)).elems) emdi12::MDIncGrp1;
5548 retval = emdi12::MDIncGrp1_ReadStrptrMaybe(*MDIncGrp1_tmp, in_str);
5549 }
5550 (void)parent;//only to avoid -Wunused-parameter
5551 return retval;
5552}
5553
5554// --- emdi12.DepthIncremental..ReadFieldMaybe
5555bool emdi12::DepthIncremental_ReadFieldMaybe(emdi12::DepthIncremental& parent, algo::strptr field, algo::strptr strval) {
5556 bool retval = true;
5557 emdi12::FieldId field_id;
5558 (void)value_SetStrptrMaybe(field_id,algo::Pathcomp(field, ".LL"));
5559 switch(field_id) {
5560 case emdi12_FieldId_base: {
5561 retval = false;
5562 break;
5563 }
5564 case emdi12_FieldId_length: {
5565 retval = false;
5566 break;
5567 }
5568 case emdi12_FieldId_id: {
5569 retval = false;
5570 break;
5571 }
5572 case emdi12_FieldId_MsgType: {
5573 retval = true;
5574 break;
5575 }
5576 case emdi12_FieldId_MsgSeqNum: {
5577 retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, strval);
5578 break;
5579 }
5580 case emdi12_FieldId_SenderCompID: {
5581 retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
5582 break;
5583 }
5584 case emdi12_FieldId_MarketSegmentID: {
5585 retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
5586 break;
5587 }
5588 case emdi12_FieldId_MDIncGrp1: {
5589 retval = MDIncGrp1_ReadStrptrMaybe(parent, strval);
5590 break;
5591 }
5592 default: break;
5593 }
5594 if (!retval) {
5595 algo_lib::AppendErrtext("attr",field);
5596 }
5597 return retval;
5598}
5599
5600// --- emdi12.DepthIncremental..ReadStrptrMaybe
5601// Any varlen fields are returned in algo_lib::_db.varlenbuf if set
5602// Read fields of emdi12::DepthIncremental from an ascii string.
5603// The format of the string is an ssim Tuple
5604bool emdi12::DepthIncremental_ReadStrptrMaybe(emdi12::DepthIncremental &parent, algo::strptr in_str) {
5605 bool retval = true;
5606 retval = algo::StripTypeTag(in_str, "emdi12.DepthIncremental");
5607 ind_beg(algo::Attr_curs, attr, in_str) {
5608 retval = retval && DepthIncremental_ReadFieldMaybe(parent, attr.name, attr.value);
5609 }ind_end;
5610 return retval;
5611}
5612
5613// --- emdi12.DepthIncremental..Print
5614// print string representation of ROW to string STR
5615// cfmt:emdi12.DepthIncremental.String printfmt:Tuple
5616void emdi12::DepthIncremental_Print(emdi12::DepthIncremental& row, algo::cstring& str) {
5617 algo::tempstr temp;
5618 str << "emdi12.DepthIncremental";
5619
5620 algo::strptr_Print(MsgType_Get(row), temp);
5621 PrintAttrSpaceReset(str,"MsgType", temp);
5622
5623 u32_Print(row.MsgSeqNum, temp);
5624 PrintAttrSpaceReset(str,"MsgSeqNum", temp);
5625
5626 u32_Print(row.SenderCompID, temp);
5627 PrintAttrSpaceReset(str,"SenderCompID", temp);
5628
5629 u32_Print(row.MarketSegmentID, temp);
5630 PrintAttrSpaceReset(str,"MarketSegmentID", temp);
5631
5632 ind_beg(DepthIncremental_MDIncGrp1_curs,MDIncGrp1,row) {
5633 emdi12::MDIncGrp1_Print(MDIncGrp1, temp);
5634 tempstr name;
5635 name << "MDIncGrp1.";
5636 name << ind_curs(MDIncGrp1).index;
5637 PrintAttrSpaceReset(str, name, temp);
5638 }ind_end;
5639}
5640
5641// --- emdi12.DepthIncremental..FastEncode
5642void emdi12::DepthIncremental_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::DepthIncremental& parent) {
5643 int index = ary_N(buf);
5644 u64 pmap(0);
5645 if (!tid_AssignedQ(state) || parent.id != state.tid) {
5646 lib_fast::EncodeUnsigned(buf,parent.id,false);
5647 lib_fast::SetPmapBit(pmap,0);
5648 }
5649 tid_SetAssigned(state);
5650 state.tid = parent.id;
5651 // MsgType string constant mandatory
5652 // MsgSeqNum unsigned increment mandatory
5653 if (MsgSeqNum_AssignedQ(state)) {
5654 if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
5655 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
5656 lib_fast::SetPmapBit(pmap,1);
5657 }
5658 } else {
5659 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
5660 lib_fast::SetPmapBit(pmap,1);
5661 }
5662 state.MsgSeqNum = parent.MsgSeqNum;
5663 MsgSeqNum_SetAssigned(state);
5664 // SenderCompID unsigned copy mandatory
5665 if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
5666 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
5667 lib_fast::SetPmapBit(pmap,2);
5668 }
5669 state.SenderCompID = parent.SenderCompID;
5670 SenderCompID_SetAssigned(state);
5671 // MarketSegmentID unsigned copy mandatory
5672 if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
5673 lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
5674 lib_fast::SetPmapBit(pmap,3);
5675 }
5676 state.MarketSegmentID = parent.MarketSegmentID;
5677 MarketSegmentID_SetAssigned(state);
5678 // MDIncGrp1 sequence none mandatory
5679 {
5680 u32 length = MDIncGrp1_N(parent);
5681 lib_fast::EncodeUnsigned(buf,length,false);
5682 ind_beg(DepthIncremental_MDIncGrp1_curs,elem,parent) {
5683 MDIncGrp1_FastEncode(buf,state,elem);
5684 }ind_end;
5685 }
5686 lib_fast::InsertPmap(buf,index,pmap);
5687}
5688
5689// --- emdi12.DepthIncremental..FastDecode
5690bool emdi12::DepthIncremental_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::DepthIncremental& parent) {
5691 bool ok = true;
5692 // MsgType string constant mandatory
5693 if (ok) {
5694 }
5695 // MsgSeqNum unsigned increment mandatory
5696 if (ok) {
5697 bool prs = lib_fast::GetPmapBit(pmap,1);
5698 if (prs) {
5699 ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
5700 if (!ok) {
5701 state.error << "emdi12.DepthIncremental.MsgSeqNum: bad Unsigned" << eol;
5702 }
5703 } else if (MsgSeqNum_AssignedQ(state)) {
5704 parent.MsgSeqNum = state.MsgSeqNum + 1;
5705 } else {
5706 ok = false;
5707 state.error << "emdi12.DepthIncremental.MsgSeqNum: increment operator: previous value unassigned" << eol;
5708 }
5709 MsgSeqNum_SetAssigned(state);
5710 state.MsgSeqNum = parent.MsgSeqNum;
5711 }
5712 // SenderCompID unsigned copy mandatory
5713 if (ok) {
5714 bool prs = lib_fast::GetPmapBit(pmap,2);
5715 if (prs) {
5716 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
5717 if (!ok) {
5718 state.error << "emdi12.DepthIncremental.SenderCompID: bad Unsigned" << eol;
5719 }
5720 } else if (SenderCompID_AssignedQ(state)) {
5721 parent.SenderCompID = state.SenderCompID;
5722 } else {
5723 ok = false;
5724 state.error << "emdi12.DepthIncremental.SenderCompID: copy operator: previous value unassigned" << eol;
5725 }
5726 SenderCompID_SetAssigned(state);
5727 state.SenderCompID = parent.SenderCompID;
5728 }
5729 // MarketSegmentID unsigned copy mandatory
5730 if (ok) {
5731 bool prs = lib_fast::GetPmapBit(pmap,3);
5732 if (prs) {
5733 ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
5734 if (!ok) {
5735 state.error << "emdi12.DepthIncremental.MarketSegmentID: bad Unsigned" << eol;
5736 }
5737 } else if (MarketSegmentID_AssignedQ(state)) {
5738 parent.MarketSegmentID = state.MarketSegmentID;
5739 } else {
5740 ok = false;
5741 state.error << "emdi12.DepthIncremental.MarketSegmentID: copy operator: previous value unassigned" << eol;
5742 }
5743 MarketSegmentID_SetAssigned(state);
5744 state.MarketSegmentID = parent.MarketSegmentID;
5745 }
5746 // MDIncGrp1 sequence none mandatory
5747 if (ok) {
5748 u32 length(0);
5749 ok = lib_fast::DecodeUnsigned(from,length,false);
5750 if (!ok) {
5751 state.error << "emdi12.DepthIncremental.MDIncGrp1: bad Unsigned" << eol;
5752 }
5753 if (!ok) {
5754 state.error << "emdi12.DepthIncremental.MDIncGrp1: bad length" << eol;
5755 }
5756 for (unsigned i=0; ok && i<length; ++i) {
5757 MDIncGrp1 &seq = *new(ary_AllocN(lib_fast::_db.varlen,sizeof seq).elems) MDIncGrp1;
5758 ok = MDIncGrp1_FastDecode(from,state,seq);
5759 if (!ok) {
5760 state.error << "emdi12.DepthIncremental.MDIncGrp1: element #"<< i+1 << eol;
5761 }
5762 }
5763 }
5764 return ok;
5765}
5766
5767// --- emdi12.DepthIncremental..FixEncode
5768void emdi12::DepthIncremental_FixEncode(cstring& buf, emdi12::DepthIncremental& parent, char soh) {
5769 buf << "35=" << MsgType_Get(parent) << soh;
5770 buf << "34=" << parent.MsgSeqNum << soh;
5771 buf << "49=" << parent.SenderCompID << soh;
5772 buf << "1300=" << parent.MarketSegmentID << soh;
5773 {
5774 u32 length = MDIncGrp1_N(parent);
5775 if (length) {
5776 buf << "268=" << length << soh;
5777 }
5778 }
5779 ind_beg(DepthIncremental_MDIncGrp1_curs,elem,parent) {
5780 MDIncGrp1_FixEncode(buf,elem,soh);
5781 }ind_end;
5782}
5783
5784// --- emdi12.RefreshIndicator.value.ToCstr
5785// Convert numeric value of field to one of predefined string constants.
5786// If string is found, return a static C string. Otherwise, return NULL.
5787const char* emdi12::value_ToCstr(const emdi12::RefreshIndicator& parent) {
5788 const char *ret = NULL;
5789 switch(value_GetEnum(parent)) {
5790 case emdi12_RefreshIndicator_Y : ret = "Y"; break;
5791 case emdi12_RefreshIndicator_N : ret = "N"; break;
5792 }
5793 return ret;
5794}
5795
5796// --- emdi12.RefreshIndicator.value.Print
5797// Convert value to a string. First, attempt conversion to a known string.
5798// If no string matches, print value as a numeric value.
5799void emdi12::value_Print(const emdi12::RefreshIndicator& parent, algo::cstring &lhs) {
5800 const char *strval = value_ToCstr(parent);
5801 if (strval) {
5802 lhs << strval;
5803 } else {
5804 lhs << parent.value;
5805 }
5806}
5807
5808// --- emdi12.RefreshIndicator.value.SetStrptrMaybe
5809// Convert string to field.
5810// If the string is invalid, do not modify field and return false.
5811// In case of success, return true
5812bool emdi12::value_SetStrptrMaybe(emdi12::RefreshIndicator& parent, algo::strptr rhs) {
5813 bool ret = false;
5814 switch (elems_N(rhs)) {
5815 case 1: {
5816 switch (u64(rhs[0])) {
5817 case 'N': {
5818 value_SetEnum(parent,emdi12_RefreshIndicator_N); ret = true; break;
5819 }
5820 case 'Y': {
5821 value_SetEnum(parent,emdi12_RefreshIndicator_Y); ret = true; break;
5822 }
5823 }
5824 break;
5825 }
5826 }
5827 return ret;
5828}
5829
5830// --- emdi12.RefreshIndicator.value.SetStrptr
5831// Convert string to field.
5832// If the string is invalid, set numeric value to DFLT
5833void emdi12::value_SetStrptr(emdi12::RefreshIndicator& parent, algo::strptr rhs, emdi12_RefreshIndicatorEnum dflt) {
5834 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
5835}
5836
5837// --- emdi12.RefreshIndicator.value.ReadStrptrMaybe
5838// Convert string to field. Return success value
5839bool emdi12::value_ReadStrptrMaybe(emdi12::RefreshIndicator& parent, algo::strptr rhs) {
5840 bool retval = false;
5841 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
5842 if (!retval) { // didn't work? try reading as underlying type
5843 retval = u32_ReadStrptrMaybe(parent.value,rhs);
5844 }
5845 return retval;
5846}
5847
5848// --- emdi12.RefreshIndicator..ReadStrptrMaybe
5849// Read fields of emdi12::RefreshIndicator from an ascii string.
5850// The format of the string is the format of the emdi12::RefreshIndicator's only field
5851bool emdi12::RefreshIndicator_ReadStrptrMaybe(emdi12::RefreshIndicator &parent, algo::strptr in_str) {
5852 bool retval = true;
5853 retval = retval && value_ReadStrptrMaybe(parent, in_str);
5854 return retval;
5855}
5856
5857// --- emdi12.RefreshIndicator..Print
5858// print string representation of ROW to string STR
5859// cfmt:emdi12.RefreshIndicator.String printfmt:Raw
5860void emdi12::RefreshIndicator_Print(emdi12::RefreshIndicator row, algo::cstring& str) {
5861 emdi12::value_Print(row, str);
5862}
5863
5864// --- emdi12.SecurityStatus.value.ToCstr
5865// Convert numeric value of field to one of predefined string constants.
5866// If string is found, return a static C string. Otherwise, return NULL.
5867const char* emdi12::value_ToCstr(const emdi12::SecurityStatus& parent) {
5868 const char *ret = NULL;
5869 switch(value_GetEnum(parent)) {
5870 case emdi12_SecurityStatus_1 : ret = "1"; break;
5871 case emdi12_SecurityStatus_2 : ret = "2"; break;
5872 case emdi12_SecurityStatus_4 : ret = "4"; break;
5873 case emdi12_SecurityStatus_6 : ret = "6"; break;
5874 case emdi12_SecurityStatus_7 : ret = "7"; break;
5875 case emdi12_SecurityStatus_9 : ret = "9"; break;
5876 case emdi12_SecurityStatus_10 : ret = "10"; break;
5877 case emdi12_SecurityStatus_11 : ret = "11"; break;
5878 case emdi12_SecurityStatus_12 : ret = "12"; break;
5879 }
5880 return ret;
5881}
5882
5883// --- emdi12.SecurityStatus.value.Print
5884// Convert value to a string. First, attempt conversion to a known string.
5885// If no string matches, print value as a numeric value.
5886void emdi12::value_Print(const emdi12::SecurityStatus& parent, algo::cstring &lhs) {
5887 const char *strval = value_ToCstr(parent);
5888 if (strval) {
5889 lhs << strval;
5890 } else {
5891 lhs << parent.value;
5892 }
5893}
5894
5895// --- emdi12.SecurityStatus.value.SetStrptrMaybe
5896// Convert string to field.
5897// If the string is invalid, do not modify field and return false.
5898// In case of success, return true
5899bool emdi12::value_SetStrptrMaybe(emdi12::SecurityStatus& parent, algo::strptr rhs) {
5900 bool ret = false;
5901 switch (elems_N(rhs)) {
5902 case 1: {
5903 switch (u64(rhs[0])) {
5904 case '1': {
5905 value_SetEnum(parent,emdi12_SecurityStatus_1); ret = true; break;
5906 }
5907 case '2': {
5908 value_SetEnum(parent,emdi12_SecurityStatus_2); ret = true; break;
5909 }
5910 case '4': {
5911 value_SetEnum(parent,emdi12_SecurityStatus_4); ret = true; break;
5912 }
5913 case '6': {
5914 value_SetEnum(parent,emdi12_SecurityStatus_6); ret = true; break;
5915 }
5916 case '7': {
5917 value_SetEnum(parent,emdi12_SecurityStatus_7); ret = true; break;
5918 }
5919 case '9': {
5920 value_SetEnum(parent,emdi12_SecurityStatus_9); ret = true; break;
5921 }
5922 }
5923 break;
5924 }
5925 case 2: {
5926 switch (u64(algo::ReadLE16(rhs.elems))) {
5927 case LE_STR2('1','0'): {
5928 value_SetEnum(parent,emdi12_SecurityStatus_10); ret = true; break;
5929 }
5930 case LE_STR2('1','1'): {
5931 value_SetEnum(parent,emdi12_SecurityStatus_11); ret = true; break;
5932 }
5933 case LE_STR2('1','2'): {
5934 value_SetEnum(parent,emdi12_SecurityStatus_12); ret = true; break;
5935 }
5936 }
5937 break;
5938 }
5939 }
5940 return ret;
5941}
5942
5943// --- emdi12.SecurityStatus.value.SetStrptr
5944// Convert string to field.
5945// If the string is invalid, set numeric value to DFLT
5946void emdi12::value_SetStrptr(emdi12::SecurityStatus& parent, algo::strptr rhs, emdi12_SecurityStatusEnum dflt) {
5947 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
5948}
5949
5950// --- emdi12.SecurityStatus.value.ReadStrptrMaybe
5951// Convert string to field. Return success value
5952bool emdi12::value_ReadStrptrMaybe(emdi12::SecurityStatus& parent, algo::strptr rhs) {
5953 bool retval = false;
5954 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
5955 if (!retval) { // didn't work? try reading as underlying type
5956 retval = u32_ReadStrptrMaybe(parent.value,rhs);
5957 }
5958 return retval;
5959}
5960
5961// --- emdi12.SecurityStatus..ReadStrptrMaybe
5962// Read fields of emdi12::SecurityStatus from an ascii string.
5963// The format of the string is the format of the emdi12::SecurityStatus's only field
5964bool emdi12::SecurityStatus_ReadStrptrMaybe(emdi12::SecurityStatus &parent, algo::strptr in_str) {
5965 bool retval = true;
5966 retval = retval && value_ReadStrptrMaybe(parent, in_str);
5967 return retval;
5968}
5969
5970// --- emdi12.SecurityStatus..Print
5971// print string representation of ROW to string STR
5972// cfmt:emdi12.SecurityStatus.String printfmt:Raw
5973void emdi12::SecurityStatus_Print(emdi12::SecurityStatus row, algo::cstring& str) {
5974 emdi12::value_Print(row, str);
5975}
5976
5977// --- emdi12.MDBookType.value.ToCstr
5978// Convert numeric value of field to one of predefined string constants.
5979// If string is found, return a static C string. Otherwise, return NULL.
5980const char* emdi12::value_ToCstr(const emdi12::MDBookType& parent) {
5981 const char *ret = NULL;
5982 switch(value_GetEnum(parent)) {
5983 case emdi12_MDBookType_1 : ret = "1"; break;
5984 case emdi12_MDBookType_2 : ret = "2"; break;
5985 case emdi12_MDBookType_3 : ret = "3"; break;
5986 }
5987 return ret;
5988}
5989
5990// --- emdi12.MDBookType.value.Print
5991// Convert value to a string. First, attempt conversion to a known string.
5992// If no string matches, print value as a numeric value.
5993void emdi12::value_Print(const emdi12::MDBookType& parent, algo::cstring &lhs) {
5994 const char *strval = value_ToCstr(parent);
5995 if (strval) {
5996 lhs << strval;
5997 } else {
5998 lhs << parent.value;
5999 }
6000}
6001
6002// --- emdi12.MDBookType.value.SetStrptrMaybe
6003// Convert string to field.
6004// If the string is invalid, do not modify field and return false.
6005// In case of success, return true
6006bool emdi12::value_SetStrptrMaybe(emdi12::MDBookType& parent, algo::strptr rhs) {
6007 bool ret = false;
6008 switch (elems_N(rhs)) {
6009 case 1: {
6010 switch (u64(rhs[0])) {
6011 case '1': {
6012 value_SetEnum(parent,emdi12_MDBookType_1); ret = true; break;
6013 }
6014 case '2': {
6015 value_SetEnum(parent,emdi12_MDBookType_2); ret = true; break;
6016 }
6017 case '3': {
6018 value_SetEnum(parent,emdi12_MDBookType_3); ret = true; break;
6019 }
6020 }
6021 break;
6022 }
6023 }
6024 return ret;
6025}
6026
6027// --- emdi12.MDBookType.value.SetStrptr
6028// Convert string to field.
6029// If the string is invalid, set numeric value to DFLT
6030void emdi12::value_SetStrptr(emdi12::MDBookType& parent, algo::strptr rhs, emdi12_MDBookTypeEnum dflt) {
6031 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
6032}
6033
6034// --- emdi12.MDBookType.value.ReadStrptrMaybe
6035// Convert string to field. Return success value
6036bool emdi12::value_ReadStrptrMaybe(emdi12::MDBookType& parent, algo::strptr rhs) {
6037 bool retval = false;
6038 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
6039 if (!retval) { // didn't work? try reading as underlying type
6040 retval = u32_ReadStrptrMaybe(parent.value,rhs);
6041 }
6042 return retval;
6043}
6044
6045// --- emdi12.MDBookType..ReadStrptrMaybe
6046// Read fields of emdi12::MDBookType from an ascii string.
6047// The format of the string is the format of the emdi12::MDBookType's only field
6048bool emdi12::MDBookType_ReadStrptrMaybe(emdi12::MDBookType &parent, algo::strptr in_str) {
6049 bool retval = true;
6050 retval = retval && value_ReadStrptrMaybe(parent, in_str);
6051 return retval;
6052}
6053
6054// --- emdi12.MDBookType..Print
6055// print string representation of ROW to string STR
6056// cfmt:emdi12.MDBookType.String printfmt:Raw
6057void emdi12::MDBookType_Print(emdi12::MDBookType row, algo::cstring& str) {
6058 emdi12::value_Print(row, str);
6059}
6060
6061// --- emdi12.MDSubBookType.value.ToCstr
6062// Convert numeric value of field to one of predefined string constants.
6063// If string is found, return a static C string. Otherwise, return NULL.
6064const char* emdi12::value_ToCstr(const emdi12::MDSubBookType& parent) {
6065 const char *ret = NULL;
6066 switch(value_GetEnum(parent)) {
6067 case emdi12_MDSubBookType_1 : ret = "1"; break;
6068 case emdi12_MDSubBookType_2 : ret = "2"; break;
6069 }
6070 return ret;
6071}
6072
6073// --- emdi12.MDSubBookType.value.Print
6074// Convert value to a string. First, attempt conversion to a known string.
6075// If no string matches, print value as a numeric value.
6076void emdi12::value_Print(const emdi12::MDSubBookType& parent, algo::cstring &lhs) {
6077 const char *strval = value_ToCstr(parent);
6078 if (strval) {
6079 lhs << strval;
6080 } else {
6081 lhs << parent.value;
6082 }
6083}
6084
6085// --- emdi12.MDSubBookType.value.SetStrptrMaybe
6086// Convert string to field.
6087// If the string is invalid, do not modify field and return false.
6088// In case of success, return true
6089bool emdi12::value_SetStrptrMaybe(emdi12::MDSubBookType& parent, algo::strptr rhs) {
6090 bool ret = false;
6091 switch (elems_N(rhs)) {
6092 case 1: {
6093 switch (u64(rhs[0])) {
6094 case '1': {
6095 value_SetEnum(parent,emdi12_MDSubBookType_1); ret = true; break;
6096 }
6097 case '2': {
6098 value_SetEnum(parent,emdi12_MDSubBookType_2); ret = true; break;
6099 }
6100 }
6101 break;
6102 }
6103 }
6104 return ret;
6105}
6106
6107// --- emdi12.MDSubBookType.value.SetStrptr
6108// Convert string to field.
6109// If the string is invalid, set numeric value to DFLT
6110void emdi12::value_SetStrptr(emdi12::MDSubBookType& parent, algo::strptr rhs, emdi12_MDSubBookTypeEnum dflt) {
6111 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
6112}
6113
6114// --- emdi12.MDSubBookType.value.ReadStrptrMaybe
6115// Convert string to field. Return success value
6116bool emdi12::value_ReadStrptrMaybe(emdi12::MDSubBookType& parent, algo::strptr rhs) {
6117 bool retval = false;
6118 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
6119 if (!retval) { // didn't work? try reading as underlying type
6120 retval = u32_ReadStrptrMaybe(parent.value,rhs);
6121 }
6122 return retval;
6123}
6124
6125// --- emdi12.MDSubBookType..ReadStrptrMaybe
6126// Read fields of emdi12::MDSubBookType from an ascii string.
6127// The format of the string is the format of the emdi12::MDSubBookType's only field
6128bool emdi12::MDSubBookType_ReadStrptrMaybe(emdi12::MDSubBookType &parent, algo::strptr in_str) {
6129 bool retval = true;
6130 retval = retval && value_ReadStrptrMaybe(parent, in_str);
6131 return retval;
6132}
6133
6134// --- emdi12.MDSubBookType..Print
6135// print string representation of ROW to string STR
6136// cfmt:emdi12.MDSubBookType.String printfmt:Raw
6137void emdi12::MDSubBookType_Print(emdi12::MDSubBookType row, algo::cstring& str) {
6138 emdi12::value_Print(row, str);
6139}
6140
6141// --- emdi12.TradingSessionID.value.ToCstr
6142// Convert numeric value of field to one of predefined string constants.
6143// If string is found, return a static C string. Otherwise, return NULL.
6144const char* emdi12::value_ToCstr(const emdi12::TradingSessionID& parent) {
6145 const char *ret = NULL;
6146 switch(value_GetEnum(parent)) {
6147 case emdi12_TradingSessionID_1 : ret = "1"; break;
6148 case emdi12_TradingSessionID_3 : ret = "3"; break;
6149 case emdi12_TradingSessionID_5 : ret = "5"; break;
6150 case emdi12_TradingSessionID_6 : ret = "6"; break;
6151 case emdi12_TradingSessionID_7 : ret = "7"; break;
6152 }
6153 return ret;
6154}
6155
6156// --- emdi12.TradingSessionID.value.Print
6157// Convert value to a string. First, attempt conversion to a known string.
6158// If no string matches, print value as a numeric value.
6159void emdi12::value_Print(const emdi12::TradingSessionID& parent, algo::cstring &lhs) {
6160 const char *strval = value_ToCstr(parent);
6161 if (strval) {
6162 lhs << strval;
6163 } else {
6164 lhs << parent.value;
6165 }
6166}
6167
6168// --- emdi12.TradingSessionID.value.SetStrptrMaybe
6169// Convert string to field.
6170// If the string is invalid, do not modify field and return false.
6171// In case of success, return true
6172bool emdi12::value_SetStrptrMaybe(emdi12::TradingSessionID& parent, algo::strptr rhs) {
6173 bool ret = false;
6174 switch (elems_N(rhs)) {
6175 case 1: {
6176 switch (u64(rhs[0])) {
6177 case '1': {
6178 value_SetEnum(parent,emdi12_TradingSessionID_1); ret = true; break;
6179 }
6180 case '3': {
6181 value_SetEnum(parent,emdi12_TradingSessionID_3); ret = true; break;
6182 }
6183 case '5': {
6184 value_SetEnum(parent,emdi12_TradingSessionID_5); ret = true; break;
6185 }
6186 case '6': {
6187 value_SetEnum(parent,emdi12_TradingSessionID_6); ret = true; break;
6188 }
6189 case '7': {
6190 value_SetEnum(parent,emdi12_TradingSessionID_7); ret = true; break;
6191 }
6192 }
6193 break;
6194 }
6195 }
6196 return ret;
6197}
6198
6199// --- emdi12.TradingSessionID.value.SetStrptr
6200// Convert string to field.
6201// If the string is invalid, set numeric value to DFLT
6202void emdi12::value_SetStrptr(emdi12::TradingSessionID& parent, algo::strptr rhs, emdi12_TradingSessionIDEnum dflt) {
6203 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
6204}
6205
6206// --- emdi12.TradingSessionID.value.ReadStrptrMaybe
6207// Convert string to field. Return success value
6208bool emdi12::value_ReadStrptrMaybe(emdi12::TradingSessionID& parent, algo::strptr rhs) {
6209 bool retval = false;
6210 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
6211 if (!retval) { // didn't work? try reading as underlying type
6212 retval = u32_ReadStrptrMaybe(parent.value,rhs);
6213 }
6214 return retval;
6215}
6216
6217// --- emdi12.TradingSessionID..ReadStrptrMaybe
6218// Read fields of emdi12::TradingSessionID from an ascii string.
6219// The format of the string is the format of the emdi12::TradingSessionID's only field
6220bool emdi12::TradingSessionID_ReadStrptrMaybe(emdi12::TradingSessionID &parent, algo::strptr in_str) {
6221 bool retval = true;
6222 retval = retval && value_ReadStrptrMaybe(parent, in_str);
6223 return retval;
6224}
6225
6226// --- emdi12.TradingSessionID..Print
6227// print string representation of ROW to string STR
6228// cfmt:emdi12.TradingSessionID.String printfmt:Raw
6229void emdi12::TradingSessionID_Print(emdi12::TradingSessionID row, algo::cstring& str) {
6230 emdi12::value_Print(row, str);
6231}
6232
6233// --- emdi12.TradingSessionSubID.value.ToCstr
6234// Convert numeric value of field to one of predefined string constants.
6235// If string is found, return a static C string. Otherwise, return NULL.
6236const char* emdi12::value_ToCstr(const emdi12::TradingSessionSubID& parent) {
6237 const char *ret = NULL;
6238 switch(value_GetEnum(parent)) {
6239 case emdi12_TradingSessionSubID_1 : ret = "1"; break;
6240 case emdi12_TradingSessionSubID_3 : ret = "3"; break;
6241 case emdi12_TradingSessionSubID_4 : ret = "4"; break;
6242 case emdi12_TradingSessionSubID_5 : ret = "5"; break;
6243 case emdi12_TradingSessionSubID_6 : ret = "6"; break;
6244 case emdi12_TradingSessionSubID_7 : ret = "7"; break;
6245 case emdi12_TradingSessionSubID_8 : ret = "8"; break;
6246 case emdi12_TradingSessionSubID_103: ret = "103"; break;
6247 case emdi12_TradingSessionSubID_104: ret = "104"; break;
6248 }
6249 return ret;
6250}
6251
6252// --- emdi12.TradingSessionSubID.value.Print
6253// Convert value to a string. First, attempt conversion to a known string.
6254// If no string matches, print value as a numeric value.
6255void emdi12::value_Print(const emdi12::TradingSessionSubID& parent, algo::cstring &lhs) {
6256 const char *strval = value_ToCstr(parent);
6257 if (strval) {
6258 lhs << strval;
6259 } else {
6260 lhs << parent.value;
6261 }
6262}
6263
6264// --- emdi12.TradingSessionSubID.value.SetStrptrMaybe
6265// Convert string to field.
6266// If the string is invalid, do not modify field and return false.
6267// In case of success, return true
6268bool emdi12::value_SetStrptrMaybe(emdi12::TradingSessionSubID& parent, algo::strptr rhs) {
6269 bool ret = false;
6270 switch (elems_N(rhs)) {
6271 case 1: {
6272 switch (u64(rhs[0])) {
6273 case '1': {
6274 value_SetEnum(parent,emdi12_TradingSessionSubID_1); ret = true; break;
6275 }
6276 case '3': {
6277 value_SetEnum(parent,emdi12_TradingSessionSubID_3); ret = true; break;
6278 }
6279 case '4': {
6280 value_SetEnum(parent,emdi12_TradingSessionSubID_4); ret = true; break;
6281 }
6282 case '5': {
6283 value_SetEnum(parent,emdi12_TradingSessionSubID_5); ret = true; break;
6284 }
6285 case '6': {
6286 value_SetEnum(parent,emdi12_TradingSessionSubID_6); ret = true; break;
6287 }
6288 case '7': {
6289 value_SetEnum(parent,emdi12_TradingSessionSubID_7); ret = true; break;
6290 }
6291 case '8': {
6292 value_SetEnum(parent,emdi12_TradingSessionSubID_8); ret = true; break;
6293 }
6294 }
6295 break;
6296 }
6297 case 3: {
6298 switch (u64(algo::ReadLE16(rhs.elems))|(u64(rhs[2])<<16)) {
6299 case LE_STR3('1','0','3'): {
6300 value_SetEnum(parent,emdi12_TradingSessionSubID_103); ret = true; break;
6301 }
6302 case LE_STR3('1','0','4'): {
6303 value_SetEnum(parent,emdi12_TradingSessionSubID_104); ret = true; break;
6304 }
6305 }
6306 break;
6307 }
6308 }
6309 return ret;
6310}
6311
6312// --- emdi12.TradingSessionSubID.value.SetStrptr
6313// Convert string to field.
6314// If the string is invalid, set numeric value to DFLT
6315void emdi12::value_SetStrptr(emdi12::TradingSessionSubID& parent, algo::strptr rhs, emdi12_TradingSessionSubIDEnum dflt) {
6316 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
6317}
6318
6319// --- emdi12.TradingSessionSubID.value.ReadStrptrMaybe
6320// Convert string to field. Return success value
6321bool emdi12::value_ReadStrptrMaybe(emdi12::TradingSessionSubID& parent, algo::strptr rhs) {
6322 bool retval = false;
6323 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
6324 if (!retval) { // didn't work? try reading as underlying type
6325 retval = u32_ReadStrptrMaybe(parent.value,rhs);
6326 }
6327 return retval;
6328}
6329
6330// --- emdi12.TradingSessionSubID..ReadStrptrMaybe
6331// Read fields of emdi12::TradingSessionSubID from an ascii string.
6332// The format of the string is the format of the emdi12::TradingSessionSubID's only field
6333bool emdi12::TradingSessionSubID_ReadStrptrMaybe(emdi12::TradingSessionSubID &parent, algo::strptr in_str) {
6334 bool retval = true;
6335 retval = retval && value_ReadStrptrMaybe(parent, in_str);
6336 return retval;
6337}
6338
6339// --- emdi12.TradingSessionSubID..Print
6340// print string representation of ROW to string STR
6341// cfmt:emdi12.TradingSessionSubID.String printfmt:Raw
6342void emdi12::TradingSessionSubID_Print(emdi12::TradingSessionSubID row, algo::cstring& str) {
6343 emdi12::value_Print(row, str);
6344}
6345
6346// --- emdi12.TradSesStatus.value.ToCstr
6347// Convert numeric value of field to one of predefined string constants.
6348// If string is found, return a static C string. Otherwise, return NULL.
6349const char* emdi12::value_ToCstr(const emdi12::TradSesStatus& parent) {
6350 const char *ret = NULL;
6351 switch(value_GetEnum(parent)) {
6352 case emdi12_TradSesStatus_1 : ret = "1"; break;
6353 case emdi12_TradSesStatus_2 : ret = "2"; break;
6354 case emdi12_TradSesStatus_3 : ret = "3"; break;
6355 case emdi12_TradSesStatus_5 : ret = "5"; break;
6356 }
6357 return ret;
6358}
6359
6360// --- emdi12.TradSesStatus.value.Print
6361// Convert value to a string. First, attempt conversion to a known string.
6362// If no string matches, print value as a numeric value.
6363void emdi12::value_Print(const emdi12::TradSesStatus& parent, algo::cstring &lhs) {
6364 const char *strval = value_ToCstr(parent);
6365 if (strval) {
6366 lhs << strval;
6367 } else {
6368 lhs << parent.value;
6369 }
6370}
6371
6372// --- emdi12.TradSesStatus.value.SetStrptrMaybe
6373// Convert string to field.
6374// If the string is invalid, do not modify field and return false.
6375// In case of success, return true
6376bool emdi12::value_SetStrptrMaybe(emdi12::TradSesStatus& parent, algo::strptr rhs) {
6377 bool ret = false;
6378 switch (elems_N(rhs)) {
6379 case 1: {
6380 switch (u64(rhs[0])) {
6381 case '1': {
6382 value_SetEnum(parent,emdi12_TradSesStatus_1); ret = true; break;
6383 }
6384 case '2': {
6385 value_SetEnum(parent,emdi12_TradSesStatus_2); ret = true; break;
6386 }
6387 case '3': {
6388 value_SetEnum(parent,emdi12_TradSesStatus_3); ret = true; break;
6389 }
6390 case '5': {
6391 value_SetEnum(parent,emdi12_TradSesStatus_5); ret = true; break;
6392 }
6393 }
6394 break;
6395 }
6396 }
6397 return ret;
6398}
6399
6400// --- emdi12.TradSesStatus.value.SetStrptr
6401// Convert string to field.
6402// If the string is invalid, set numeric value to DFLT
6403void emdi12::value_SetStrptr(emdi12::TradSesStatus& parent, algo::strptr rhs, emdi12_TradSesStatusEnum dflt) {
6404 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
6405}
6406
6407// --- emdi12.TradSesStatus.value.ReadStrptrMaybe
6408// Convert string to field. Return success value
6409bool emdi12::value_ReadStrptrMaybe(emdi12::TradSesStatus& parent, algo::strptr rhs) {
6410 bool retval = false;
6411 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
6412 if (!retval) { // didn't work? try reading as underlying type
6413 retval = u32_ReadStrptrMaybe(parent.value,rhs);
6414 }
6415 return retval;
6416}
6417
6418// --- emdi12.TradSesStatus..ReadStrptrMaybe
6419// Read fields of emdi12::TradSesStatus from an ascii string.
6420// The format of the string is the format of the emdi12::TradSesStatus's only field
6421bool emdi12::TradSesStatus_ReadStrptrMaybe(emdi12::TradSesStatus &parent, algo::strptr in_str) {
6422 bool retval = true;
6423 retval = retval && value_ReadStrptrMaybe(parent, in_str);
6424 return retval;
6425}
6426
6427// --- emdi12.TradSesStatus..Print
6428// print string representation of ROW to string STR
6429// cfmt:emdi12.TradSesStatus.String printfmt:Raw
6430void emdi12::TradSesStatus_Print(emdi12::TradSesStatus row, algo::cstring& str) {
6431 emdi12::value_Print(row, str);
6432}
6433
6434// --- emdi12.SecurityTradingStatus.value.ToCstr
6435// Convert numeric value of field to one of predefined string constants.
6436// If string is found, return a static C string. Otherwise, return NULL.
6437const char* emdi12::value_ToCstr(const emdi12::SecurityTradingStatus& parent) {
6438 const char *ret = NULL;
6439 switch(value_GetEnum(parent)) {
6440 case emdi12_SecurityTradingStatus_2: ret = "2"; break;
6441 case emdi12_SecurityTradingStatus_200: ret = "200"; break;
6442 case emdi12_SecurityTradingStatus_201: ret = "201"; break;
6443 case emdi12_SecurityTradingStatus_202: ret = "202"; break;
6444 case emdi12_SecurityTradingStatus_203: ret = "203"; break;
6445 case emdi12_SecurityTradingStatus_204: ret = "204"; break;
6446 case emdi12_SecurityTradingStatus_205: ret = "205"; break;
6447 case emdi12_SecurityTradingStatus_206: ret = "206"; break;
6448 case emdi12_SecurityTradingStatus_207: ret = "207"; break;
6449 case emdi12_SecurityTradingStatus_208: ret = "208"; break;
6450 case emdi12_SecurityTradingStatus_209: ret = "209"; break;
6451 case emdi12_SecurityTradingStatus_210: ret = "210"; break;
6452 case emdi12_SecurityTradingStatus_211: ret = "211"; break;
6453 case emdi12_SecurityTradingStatus_212: ret = "212"; break;
6454 case emdi12_SecurityTradingStatus_213: ret = "213"; break;
6455 case emdi12_SecurityTradingStatus_214: ret = "214"; break;
6456 case emdi12_SecurityTradingStatus_215: ret = "215"; break;
6457 case emdi12_SecurityTradingStatus_216: ret = "216"; break;
6458 case emdi12_SecurityTradingStatus_217: ret = "217"; break;
6459 }
6460 return ret;
6461}
6462
6463// --- emdi12.SecurityTradingStatus.value.Print
6464// Convert value to a string. First, attempt conversion to a known string.
6465// If no string matches, print value as a numeric value.
6466void emdi12::value_Print(const emdi12::SecurityTradingStatus& parent, algo::cstring &lhs) {
6467 const char *strval = value_ToCstr(parent);
6468 if (strval) {
6469 lhs << strval;
6470 } else {
6471 lhs << parent.value;
6472 }
6473}
6474
6475// --- emdi12.SecurityTradingStatus.value.SetStrptrMaybe
6476// Convert string to field.
6477// If the string is invalid, do not modify field and return false.
6478// In case of success, return true
6479bool emdi12::value_SetStrptrMaybe(emdi12::SecurityTradingStatus& parent, algo::strptr rhs) {
6480 bool ret = false;
6481 switch (elems_N(rhs)) {
6482 case 1: {
6483 switch (u64(rhs[0])) {
6484 case '2': {
6485 value_SetEnum(parent,emdi12_SecurityTradingStatus_2); ret = true; break;
6486 }
6487 }
6488 break;
6489 }
6490 case 3: {
6491 switch (u64(algo::ReadLE16(rhs.elems))|(u64(rhs[2])<<16)) {
6492 case LE_STR3('2','0','0'): {
6493 value_SetEnum(parent,emdi12_SecurityTradingStatus_200); ret = true; break;
6494 }
6495 case LE_STR3('2','0','1'): {
6496 value_SetEnum(parent,emdi12_SecurityTradingStatus_201); ret = true; break;
6497 }
6498 case LE_STR3('2','0','2'): {
6499 value_SetEnum(parent,emdi12_SecurityTradingStatus_202); ret = true; break;
6500 }
6501 case LE_STR3('2','0','3'): {
6502 value_SetEnum(parent,emdi12_SecurityTradingStatus_203); ret = true; break;
6503 }
6504 case LE_STR3('2','0','4'): {
6505 value_SetEnum(parent,emdi12_SecurityTradingStatus_204); ret = true; break;
6506 }
6507 case LE_STR3('2','0','5'): {
6508 value_SetEnum(parent,emdi12_SecurityTradingStatus_205); ret = true; break;
6509 }
6510 case LE_STR3('2','0','6'): {
6511 value_SetEnum(parent,emdi12_SecurityTradingStatus_206); ret = true; break;
6512 }
6513 case LE_STR3('2','0','7'): {
6514 value_SetEnum(parent,emdi12_SecurityTradingStatus_207); ret = true; break;
6515 }
6516 case LE_STR3('2','0','8'): {
6517 value_SetEnum(parent,emdi12_SecurityTradingStatus_208); ret = true; break;
6518 }
6519 case LE_STR3('2','0','9'): {
6520 value_SetEnum(parent,emdi12_SecurityTradingStatus_209); ret = true; break;
6521 }
6522 case LE_STR3('2','1','0'): {
6523 value_SetEnum(parent,emdi12_SecurityTradingStatus_210); ret = true; break;
6524 }
6525 case LE_STR3('2','1','1'): {
6526 value_SetEnum(parent,emdi12_SecurityTradingStatus_211); ret = true; break;
6527 }
6528 case LE_STR3('2','1','2'): {
6529 value_SetEnum(parent,emdi12_SecurityTradingStatus_212); ret = true; break;
6530 }
6531 case LE_STR3('2','1','3'): {
6532 value_SetEnum(parent,emdi12_SecurityTradingStatus_213); ret = true; break;
6533 }
6534 case LE_STR3('2','1','4'): {
6535 value_SetEnum(parent,emdi12_SecurityTradingStatus_214); ret = true; break;
6536 }
6537 case LE_STR3('2','1','5'): {
6538 value_SetEnum(parent,emdi12_SecurityTradingStatus_215); ret = true; break;
6539 }
6540 case LE_STR3('2','1','6'): {
6541 value_SetEnum(parent,emdi12_SecurityTradingStatus_216); ret = true; break;
6542 }
6543 case LE_STR3('2','1','7'): {
6544 value_SetEnum(parent,emdi12_SecurityTradingStatus_217); ret = true; break;
6545 }
6546 }
6547 break;
6548 }
6549 }
6550 return ret;
6551}
6552
6553// --- emdi12.SecurityTradingStatus.value.SetStrptr
6554// Convert string to field.
6555// If the string is invalid, set numeric value to DFLT
6556void emdi12::value_SetStrptr(emdi12::SecurityTradingStatus& parent, algo::strptr rhs, emdi12_SecurityTradingStatusEnum dflt) {
6557 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
6558}
6559
6560// --- emdi12.SecurityTradingStatus.value.ReadStrptrMaybe
6561// Convert string to field. Return success value
6562bool emdi12::value_ReadStrptrMaybe(emdi12::SecurityTradingStatus& parent, algo::strptr rhs) {
6563 bool retval = false;
6564 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
6565 if (!retval) { // didn't work? try reading as underlying type
6566 retval = u32_ReadStrptrMaybe(parent.value,rhs);
6567 }
6568 return retval;
6569}
6570
6571// --- emdi12.SecurityTradingStatus..ReadStrptrMaybe
6572// Read fields of emdi12::SecurityTradingStatus from an ascii string.
6573// The format of the string is the format of the emdi12::SecurityTradingStatus's only field
6574bool emdi12::SecurityTradingStatus_ReadStrptrMaybe(emdi12::SecurityTradingStatus &parent, algo::strptr in_str) {
6575 bool retval = true;
6576 retval = retval && value_ReadStrptrMaybe(parent, in_str);
6577 return retval;
6578}
6579
6580// --- emdi12.SecurityTradingStatus..Print
6581// print string representation of ROW to string STR
6582// cfmt:emdi12.SecurityTradingStatus.String printfmt:Raw
6583void emdi12::SecurityTradingStatus_Print(emdi12::SecurityTradingStatus row, algo::cstring& str) {
6584 emdi12::value_Print(row, str);
6585}
6586
6587// --- emdi12.MarketCondition.value.ToCstr
6588// Convert numeric value of field to one of predefined string constants.
6589// If string is found, return a static C string. Otherwise, return NULL.
6590const char* emdi12::value_ToCstr(const emdi12::MarketCondition& parent) {
6591 const char *ret = NULL;
6592 switch(value_GetEnum(parent)) {
6593 case emdi12_MarketCondition_0 : ret = "0"; break;
6594 case emdi12_MarketCondition_1 : ret = "1"; break;
6595 }
6596 return ret;
6597}
6598
6599// --- emdi12.MarketCondition.value.Print
6600// Convert value to a string. First, attempt conversion to a known string.
6601// If no string matches, print value as a numeric value.
6602void emdi12::value_Print(const emdi12::MarketCondition& parent, algo::cstring &lhs) {
6603 const char *strval = value_ToCstr(parent);
6604 if (strval) {
6605 lhs << strval;
6606 } else {
6607 lhs << parent.value;
6608 }
6609}
6610
6611// --- emdi12.MarketCondition.value.SetStrptrMaybe
6612// Convert string to field.
6613// If the string is invalid, do not modify field and return false.
6614// In case of success, return true
6615bool emdi12::value_SetStrptrMaybe(emdi12::MarketCondition& parent, algo::strptr rhs) {
6616 bool ret = false;
6617 switch (elems_N(rhs)) {
6618 case 1: {
6619 switch (u64(rhs[0])) {
6620 case '0': {
6621 value_SetEnum(parent,emdi12_MarketCondition_0); ret = true; break;
6622 }
6623 case '1': {
6624 value_SetEnum(parent,emdi12_MarketCondition_1); ret = true; break;
6625 }
6626 }
6627 break;
6628 }
6629 }
6630 return ret;
6631}
6632
6633// --- emdi12.MarketCondition.value.SetStrptr
6634// Convert string to field.
6635// If the string is invalid, set numeric value to DFLT
6636void emdi12::value_SetStrptr(emdi12::MarketCondition& parent, algo::strptr rhs, emdi12_MarketConditionEnum dflt) {
6637 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
6638}
6639
6640// --- emdi12.MarketCondition.value.ReadStrptrMaybe
6641// Convert string to field. Return success value
6642bool emdi12::value_ReadStrptrMaybe(emdi12::MarketCondition& parent, algo::strptr rhs) {
6643 bool retval = false;
6644 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
6645 if (!retval) { // didn't work? try reading as underlying type
6646 retval = u32_ReadStrptrMaybe(parent.value,rhs);
6647 }
6648 return retval;
6649}
6650
6651// --- emdi12.MarketCondition..ReadStrptrMaybe
6652// Read fields of emdi12::MarketCondition from an ascii string.
6653// The format of the string is the format of the emdi12::MarketCondition's only field
6654bool emdi12::MarketCondition_ReadStrptrMaybe(emdi12::MarketCondition &parent, algo::strptr in_str) {
6655 bool retval = true;
6656 retval = retval && value_ReadStrptrMaybe(parent, in_str);
6657 return retval;
6658}
6659
6660// --- emdi12.MarketCondition..Print
6661// print string representation of ROW to string STR
6662// cfmt:emdi12.MarketCondition.String printfmt:Raw
6663void emdi12::MarketCondition_Print(emdi12::MarketCondition row, algo::cstring& str) {
6664 emdi12::value_Print(row, str);
6665}
6666
6667// --- emdi12.FastMarketIndicator.value.ToCstr
6668// Convert numeric value of field to one of predefined string constants.
6669// If string is found, return a static C string. Otherwise, return NULL.
6670const char* emdi12::value_ToCstr(const emdi12::FastMarketIndicator& parent) {
6671 const char *ret = NULL;
6672 switch(value_GetEnum(parent)) {
6673 case emdi12_FastMarketIndicator_0 : ret = "0"; break;
6674 case emdi12_FastMarketIndicator_1 : ret = "1"; break;
6675 }
6676 return ret;
6677}
6678
6679// --- emdi12.FastMarketIndicator.value.Print
6680// Convert value to a string. First, attempt conversion to a known string.
6681// If no string matches, print value as a numeric value.
6682void emdi12::value_Print(const emdi12::FastMarketIndicator& parent, algo::cstring &lhs) {
6683 const char *strval = value_ToCstr(parent);
6684 if (strval) {
6685 lhs << strval;
6686 } else {
6687 lhs << parent.value;
6688 }
6689}
6690
6691// --- emdi12.FastMarketIndicator.value.SetStrptrMaybe
6692// Convert string to field.
6693// If the string is invalid, do not modify field and return false.
6694// In case of success, return true
6695bool emdi12::value_SetStrptrMaybe(emdi12::FastMarketIndicator& parent, algo::strptr rhs) {
6696 bool ret = false;
6697 switch (elems_N(rhs)) {
6698 case 1: {
6699 switch (u64(rhs[0])) {
6700 case '0': {
6701 value_SetEnum(parent,emdi12_FastMarketIndicator_0); ret = true; break;
6702 }
6703 case '1': {
6704 value_SetEnum(parent,emdi12_FastMarketIndicator_1); ret = true; break;
6705 }
6706 }
6707 break;
6708 }
6709 }
6710 return ret;
6711}
6712
6713// --- emdi12.FastMarketIndicator.value.SetStrptr
6714// Convert string to field.
6715// If the string is invalid, set numeric value to DFLT
6716void emdi12::value_SetStrptr(emdi12::FastMarketIndicator& parent, algo::strptr rhs, emdi12_FastMarketIndicatorEnum dflt) {
6717 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
6718}
6719
6720// --- emdi12.FastMarketIndicator.value.ReadStrptrMaybe
6721// Convert string to field. Return success value
6722bool emdi12::value_ReadStrptrMaybe(emdi12::FastMarketIndicator& parent, algo::strptr rhs) {
6723 bool retval = false;
6724 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
6725 if (!retval) { // didn't work? try reading as underlying type
6726 retval = u32_ReadStrptrMaybe(parent.value,rhs);
6727 }
6728 return retval;
6729}
6730
6731// --- emdi12.FastMarketIndicator..ReadStrptrMaybe
6732// Read fields of emdi12::FastMarketIndicator from an ascii string.
6733// The format of the string is the format of the emdi12::FastMarketIndicator's only field
6734bool emdi12::FastMarketIndicator_ReadStrptrMaybe(emdi12::FastMarketIndicator &parent, algo::strptr in_str) {
6735 bool retval = true;
6736 retval = retval && value_ReadStrptrMaybe(parent, in_str);
6737 return retval;
6738}
6739
6740// --- emdi12.FastMarketIndicator..Print
6741// print string representation of ROW to string STR
6742// cfmt:emdi12.FastMarketIndicator.String printfmt:Raw
6743void emdi12::FastMarketIndicator_Print(emdi12::FastMarketIndicator row, algo::cstring& str) {
6744 emdi12::value_Print(row, str);
6745}
6746
6747// --- emdi12.SoldOutIndicator.value.ToCstr
6748// Convert numeric value of field to one of predefined string constants.
6749// If string is found, return a static C string. Otherwise, return NULL.
6750const char* emdi12::value_ToCstr(const emdi12::SoldOutIndicator& parent) {
6751 const char *ret = NULL;
6752 switch(value_GetEnum(parent)) {
6753 case emdi12_SoldOutIndicator_1 : ret = "1"; break;
6754 }
6755 return ret;
6756}
6757
6758// --- emdi12.SoldOutIndicator.value.Print
6759// Convert value to a string. First, attempt conversion to a known string.
6760// If no string matches, print value as a numeric value.
6761void emdi12::value_Print(const emdi12::SoldOutIndicator& parent, algo::cstring &lhs) {
6762 const char *strval = value_ToCstr(parent);
6763 if (strval) {
6764 lhs << strval;
6765 } else {
6766 lhs << parent.value;
6767 }
6768}
6769
6770// --- emdi12.SoldOutIndicator.value.SetStrptrMaybe
6771// Convert string to field.
6772// If the string is invalid, do not modify field and return false.
6773// In case of success, return true
6774bool emdi12::value_SetStrptrMaybe(emdi12::SoldOutIndicator& parent, algo::strptr rhs) {
6775 bool ret = false;
6776 switch (elems_N(rhs)) {
6777 case 1: {
6778 switch (u64(rhs[0])) {
6779 case '1': {
6780 value_SetEnum(parent,emdi12_SoldOutIndicator_1); ret = true; break;
6781 }
6782 }
6783 break;
6784 }
6785 }
6786 return ret;
6787}
6788
6789// --- emdi12.SoldOutIndicator.value.SetStrptr
6790// Convert string to field.
6791// If the string is invalid, set numeric value to DFLT
6792void emdi12::value_SetStrptr(emdi12::SoldOutIndicator& parent, algo::strptr rhs, emdi12_SoldOutIndicatorEnum dflt) {
6793 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
6794}
6795
6796// --- emdi12.SoldOutIndicator.value.ReadStrptrMaybe
6797// Convert string to field. Return success value
6798bool emdi12::value_ReadStrptrMaybe(emdi12::SoldOutIndicator& parent, algo::strptr rhs) {
6799 bool retval = false;
6800 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
6801 if (!retval) { // didn't work? try reading as underlying type
6802 retval = u32_ReadStrptrMaybe(parent.value,rhs);
6803 }
6804 return retval;
6805}
6806
6807// --- emdi12.SoldOutIndicator..ReadStrptrMaybe
6808// Read fields of emdi12::SoldOutIndicator from an ascii string.
6809// The format of the string is the format of the emdi12::SoldOutIndicator's only field
6810bool emdi12::SoldOutIndicator_ReadStrptrMaybe(emdi12::SoldOutIndicator &parent, algo::strptr in_str) {
6811 bool retval = true;
6812 retval = retval && value_ReadStrptrMaybe(parent, in_str);
6813 return retval;
6814}
6815
6816// --- emdi12.SoldOutIndicator..Print
6817// print string representation of ROW to string STR
6818// cfmt:emdi12.SoldOutIndicator.String printfmt:Raw
6819void emdi12::SoldOutIndicator_Print(emdi12::SoldOutIndicator row, algo::cstring& str) {
6820 emdi12::value_Print(row, str);
6821}
6822
6823// --- emdi12.MDSshGrp.MDOriginType.ReadStrptrMaybe
6824inline static bool emdi12::MDOriginType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6825 bool retval = true;
6826 retval = emdi12::MDOriginType_ReadStrptrMaybe(parent.MDOriginType, in_str);
6827 return retval;
6828}
6829
6830// --- emdi12.MDSshGrp.MDEntryType.ReadStrptrMaybe
6831inline static bool emdi12::MDEntryType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6832 bool retval = true;
6833 retval = emdi12::MDEntryType_ReadStrptrMaybe(parent.MDEntryType, in_str);
6834 return retval;
6835}
6836
6837// --- emdi12.MDSshGrp.MDBookType.ReadStrptrMaybe
6838inline static bool emdi12::MDBookType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6839 bool retval = true;
6840 emdi12::MDBookType MDBookType_tmp;
6841 retval = emdi12::MDBookType_ReadStrptrMaybe(MDBookType_tmp, in_str);
6842 if (retval) {
6843 MDBookType_Set(parent, MDBookType_tmp);
6844 }
6845 return retval;
6846}
6847
6848// --- emdi12.MDSshGrp.MDSubBookType.ReadStrptrMaybe
6849inline static bool emdi12::MDSubBookType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6850 bool retval = true;
6851 emdi12::MDSubBookType MDSubBookType_tmp;
6852 retval = emdi12::MDSubBookType_ReadStrptrMaybe(MDSubBookType_tmp, in_str);
6853 if (retval) {
6854 MDSubBookType_Set(parent, MDSubBookType_tmp);
6855 }
6856 return retval;
6857}
6858
6859// --- emdi12.MDSshGrp.TrdType.ReadStrptrMaybe
6860inline static bool emdi12::TrdType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6861 bool retval = true;
6862 emdi12::TrdType TrdType_tmp;
6863 retval = emdi12::TrdType_ReadStrptrMaybe(TrdType_tmp, in_str);
6864 if (retval) {
6865 TrdType_Set(parent, TrdType_tmp);
6866 }
6867 return retval;
6868}
6869
6870// --- emdi12.MDSshGrp.TradingSessionID.ReadStrptrMaybe
6871inline static bool emdi12::TradingSessionID_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6872 bool retval = true;
6873 emdi12::TradingSessionID TradingSessionID_tmp;
6874 retval = emdi12::TradingSessionID_ReadStrptrMaybe(TradingSessionID_tmp, in_str);
6875 if (retval) {
6876 TradingSessionID_Set(parent, TradingSessionID_tmp);
6877 }
6878 return retval;
6879}
6880
6881// --- emdi12.MDSshGrp.TradingSessionSubID.ReadStrptrMaybe
6882inline static bool emdi12::TradingSessionSubID_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6883 bool retval = true;
6884 emdi12::TradingSessionSubID TradingSessionSubID_tmp;
6885 retval = emdi12::TradingSessionSubID_ReadStrptrMaybe(TradingSessionSubID_tmp, in_str);
6886 if (retval) {
6887 TradingSessionSubID_Set(parent, TradingSessionSubID_tmp);
6888 }
6889 return retval;
6890}
6891
6892// --- emdi12.MDSshGrp.TESTradSesStatus.ReadStrptrMaybe
6893inline static bool emdi12::TESTradSesStatus_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6894 bool retval = true;
6895 emdi12::TradSesStatus TESTradSesStatus_tmp;
6896 retval = emdi12::TradSesStatus_ReadStrptrMaybe(TESTradSesStatus_tmp, in_str);
6897 if (retval) {
6898 TESTradSesStatus_Set(parent, TESTradSesStatus_tmp);
6899 }
6900 return retval;
6901}
6902
6903// --- emdi12.MDSshGrp.SecurityTradingStatus.ReadStrptrMaybe
6904inline static bool emdi12::SecurityTradingStatus_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6905 bool retval = true;
6906 emdi12::SecurityTradingStatus SecurityTradingStatus_tmp;
6907 retval = emdi12::SecurityTradingStatus_ReadStrptrMaybe(SecurityTradingStatus_tmp, in_str);
6908 if (retval) {
6909 SecurityTradingStatus_Set(parent, SecurityTradingStatus_tmp);
6910 }
6911 return retval;
6912}
6913
6914// --- emdi12.MDSshGrp.MarketCondition.ReadStrptrMaybe
6915inline static bool emdi12::MarketCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6916 bool retval = true;
6917 emdi12::MarketCondition MarketCondition_tmp;
6918 retval = emdi12::MarketCondition_ReadStrptrMaybe(MarketCondition_tmp, in_str);
6919 if (retval) {
6920 MarketCondition_Set(parent, MarketCondition_tmp);
6921 }
6922 return retval;
6923}
6924
6925// --- emdi12.MDSshGrp.FastMarketIndicator.ReadStrptrMaybe
6926inline static bool emdi12::FastMarketIndicator_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6927 bool retval = true;
6928 emdi12::FastMarketIndicator FastMarketIndicator_tmp;
6929 retval = emdi12::FastMarketIndicator_ReadStrptrMaybe(FastMarketIndicator_tmp, in_str);
6930 if (retval) {
6931 FastMarketIndicator_Set(parent, FastMarketIndicator_tmp);
6932 }
6933 return retval;
6934}
6935
6936// --- emdi12.MDSshGrp.SecurityTradingEvent.ReadStrptrMaybe
6937inline static bool emdi12::SecurityTradingEvent_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6938 bool retval = true;
6939 emdi12::SecurityTradingEvent SecurityTradingEvent_tmp;
6940 retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(SecurityTradingEvent_tmp, in_str);
6941 if (retval) {
6942 SecurityTradingEvent_Set(parent, SecurityTradingEvent_tmp);
6943 }
6944 return retval;
6945}
6946
6947// --- emdi12.MDSshGrp.PotentialSecurityTradingEvent.ReadStrptrMaybe
6948inline static bool emdi12::PotentialSecurityTradingEvent_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6949 bool retval = true;
6950 emdi12::SecurityTradingEvent PotentialSecurityTradingEvent_tmp;
6951 retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(PotentialSecurityTradingEvent_tmp, in_str);
6952 if (retval) {
6953 PotentialSecurityTradingEvent_Set(parent, PotentialSecurityTradingEvent_tmp);
6954 }
6955 return retval;
6956}
6957
6958// --- emdi12.MDSshGrp.SoldOutIndicator.ReadStrptrMaybe
6959inline static bool emdi12::SoldOutIndicator_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6960 bool retval = true;
6961 emdi12::SoldOutIndicator SoldOutIndicator_tmp;
6962 retval = emdi12::SoldOutIndicator_ReadStrptrMaybe(SoldOutIndicator_tmp, in_str);
6963 if (retval) {
6964 SoldOutIndicator_Set(parent, SoldOutIndicator_tmp);
6965 }
6966 return retval;
6967}
6968
6969// --- emdi12.MDSshGrp.HighPx.ReadStrptrMaybe
6970inline static bool emdi12::HighPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6971 bool retval = true;
6972 algo::Decimal HighPx_tmp;
6973 retval = algo::Decimal_ReadStrptrMaybe(HighPx_tmp, in_str);
6974 if (retval) {
6975 HighPx_Set(parent, HighPx_tmp);
6976 }
6977 return retval;
6978}
6979
6980// --- emdi12.MDSshGrp.LowPx.ReadStrptrMaybe
6981inline static bool emdi12::LowPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6982 bool retval = true;
6983 algo::Decimal LowPx_tmp;
6984 retval = algo::Decimal_ReadStrptrMaybe(LowPx_tmp, in_str);
6985 if (retval) {
6986 LowPx_Set(parent, LowPx_tmp);
6987 }
6988 return retval;
6989}
6990
6991// --- emdi12.MDSshGrp.TradeCondition.ReadStrptrMaybe
6992inline static bool emdi12::TradeCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
6993 bool retval = true;
6994 emdi12::TradeConditionSet TradeCondition_tmp;
6995 retval = emdi12::TradeConditionSet_ReadStrptrMaybe(TradeCondition_tmp, in_str);
6996 if (retval) {
6997 TradeCondition_Set(parent, TradeCondition_tmp);
6998 }
6999 return retval;
7000}
7001
7002// --- emdi12.MDSshGrp.MultiLegReportingType.ReadStrptrMaybe
7003inline static bool emdi12::MultiLegReportingType_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
7004 bool retval = true;
7005 emdi12::MultiLegReportingType MultiLegReportingType_tmp;
7006 retval = emdi12::MultiLegReportingType_ReadStrptrMaybe(MultiLegReportingType_tmp, in_str);
7007 if (retval) {
7008 MultiLegReportingType_Set(parent, MultiLegReportingType_tmp);
7009 }
7010 return retval;
7011}
7012
7013// --- emdi12.MDSshGrp.MultiLegPriceModel.ReadStrptrMaybe
7014inline static bool emdi12::MultiLegPriceModel_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
7015 bool retval = true;
7016 emdi12::MultiLegPriceModel MultiLegPriceModel_tmp;
7017 retval = emdi12::MultiLegPriceModel_ReadStrptrMaybe(MultiLegPriceModel_tmp, in_str);
7018 if (retval) {
7019 MultiLegPriceModel_Set(parent, MultiLegPriceModel_tmp);
7020 }
7021 return retval;
7022}
7023
7024// --- emdi12.MDSshGrp.QuoteCondition.ReadStrptrMaybe
7025inline static bool emdi12::QuoteCondition_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
7026 bool retval = true;
7027 emdi12::QuoteCondition QuoteCondition_tmp;
7028 retval = emdi12::QuoteCondition_ReadStrptrMaybe(QuoteCondition_tmp, in_str);
7029 if (retval) {
7030 QuoteCondition_Set(parent, QuoteCondition_tmp);
7031 }
7032 return retval;
7033}
7034
7035// --- emdi12.MDSshGrp.MDEntryPx.ReadStrptrMaybe
7036inline static bool emdi12::MDEntryPx_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
7037 bool retval = true;
7038 algo::Decimal MDEntryPx_tmp;
7039 retval = algo::Decimal_ReadStrptrMaybe(MDEntryPx_tmp, in_str);
7040 if (retval) {
7041 MDEntryPx_Set(parent, MDEntryPx_tmp);
7042 }
7043 return retval;
7044}
7045
7046// --- emdi12.MDSshGrp.MDEntrySize.ReadStrptrMaybe
7047inline static bool emdi12::MDEntrySize_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
7048 bool retval = true;
7049 algo::Decimal MDEntrySize_tmp;
7050 retval = algo::Decimal_ReadStrptrMaybe(MDEntrySize_tmp, in_str);
7051 if (retval) {
7052 MDEntrySize_Set(parent, MDEntrySize_tmp);
7053 }
7054 return retval;
7055}
7056
7057// --- emdi12.MDSshGrp.NumberOfOrders.ReadStrptrMaybe
7058inline static bool emdi12::NumberOfOrders_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
7059 bool retval = true;
7060 u32 NumberOfOrders_tmp;
7061 retval = u32_ReadStrptrMaybe(NumberOfOrders_tmp, in_str);
7062 if (retval) {
7063 NumberOfOrders_Set(parent, NumberOfOrders_tmp);
7064 }
7065 return retval;
7066}
7067
7068// --- emdi12.MDSshGrp.MDPriceLevel.ReadStrptrMaybe
7069inline static bool emdi12::MDPriceLevel_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
7070 bool retval = true;
7071 u32 MDPriceLevel_tmp;
7072 retval = u32_ReadStrptrMaybe(MDPriceLevel_tmp, in_str);
7073 if (retval) {
7074 MDPriceLevel_Set(parent, MDPriceLevel_tmp);
7075 }
7076 return retval;
7077}
7078
7079// --- emdi12.MDSshGrp.MDEntryTime.ReadStrptrMaybe
7080inline static bool emdi12::MDEntryTime_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
7081 bool retval = true;
7082 i64 MDEntryTime_tmp;
7083 retval = i64_ReadStrptrMaybe(MDEntryTime_tmp, in_str);
7084 if (retval) {
7085 MDEntryTime_Set(parent, MDEntryTime_tmp);
7086 }
7087 return retval;
7088}
7089
7090// --- emdi12.MDSshGrp.NonDisclosedTradeVolume.ReadStrptrMaybe
7091inline static bool emdi12::NonDisclosedTradeVolume_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
7092 bool retval = true;
7093 algo::Decimal NonDisclosedTradeVolume_tmp;
7094 retval = algo::Decimal_ReadStrptrMaybe(NonDisclosedTradeVolume_tmp, in_str);
7095 if (retval) {
7096 NonDisclosedTradeVolume_Set(parent, NonDisclosedTradeVolume_tmp);
7097 }
7098 return retval;
7099}
7100
7101// --- emdi12.MDSshGrp.TotalNumOfTrades.ReadStrptrMaybe
7102inline static bool emdi12::TotalNumOfTrades_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
7103 bool retval = true;
7104 u32 TotalNumOfTrades_tmp;
7105 retval = u32_ReadStrptrMaybe(TotalNumOfTrades_tmp, in_str);
7106 if (retval) {
7107 TotalNumOfTrades_Set(parent, TotalNumOfTrades_tmp);
7108 }
7109 return retval;
7110}
7111
7112// --- emdi12.MDSshGrp.pmask_bitcurs.Next
7113// proceed to next item
7114void emdi12::MDSshGrp_pmask_bitcurs_Next(MDSshGrp_pmask_bitcurs &curs) {
7115 ++curs.bit;
7116 int index = curs.bit / 32;
7117 int offset = curs.bit % 32;
7118 for (; index < curs.n_elems; ++index, offset = 0) {
7119 u64 rest = curs.elems[index] >> offset;
7120 if (rest) {
7121 offset += algo::u64_BitScanForward(rest);
7122 break;
7123 }
7124 }
7125 curs.bit = index * 32 + offset;
7126}
7127
7128// --- emdi12.MDSshGrp..ReadFieldMaybe
7129bool emdi12::MDSshGrp_ReadFieldMaybe(emdi12::MDSshGrp& parent, algo::strptr field, algo::strptr strval) {
7130 bool retval = true;
7131 emdi12::FieldId field_id;
7132 (void)value_SetStrptrMaybe(field_id,field);
7133 switch(field_id) {
7134 case emdi12_FieldId_pmask: {
7135 retval = false;
7136 break;
7137 }
7138 case emdi12_FieldId_MDOriginType: {
7139 retval = MDOriginType_ReadStrptrMaybe(parent, strval);
7140 break;
7141 }
7142 case emdi12_FieldId_MDEntryType: {
7143 retval = MDEntryType_ReadStrptrMaybe(parent, strval);
7144 break;
7145 }
7146 case emdi12_FieldId_MDBookType: {
7147 retval = MDBookType_ReadStrptrMaybe(parent, strval);
7148 if (retval) {
7149 pmask_qSetBit(parent, 3);
7150 }
7151 break;
7152 }
7153 case emdi12_FieldId_MDSubBookType: {
7154 retval = MDSubBookType_ReadStrptrMaybe(parent, strval);
7155 if (retval) {
7156 pmask_qSetBit(parent, 8);
7157 }
7158 break;
7159 }
7160 case emdi12_FieldId_TrdType: {
7161 retval = TrdType_ReadStrptrMaybe(parent, strval);
7162 if (retval) {
7163 pmask_qSetBit(parent, 24);
7164 }
7165 break;
7166 }
7167 case emdi12_FieldId_TradingSessionID: {
7168 retval = TradingSessionID_ReadStrptrMaybe(parent, strval);
7169 if (retval) {
7170 pmask_qSetBit(parent, 22);
7171 }
7172 break;
7173 }
7174 case emdi12_FieldId_TradingSessionSubID: {
7175 retval = TradingSessionSubID_ReadStrptrMaybe(parent, strval);
7176 if (retval) {
7177 pmask_qSetBit(parent, 23);
7178 }
7179 break;
7180 }
7181 case emdi12_FieldId_TESTradSesStatus: {
7182 retval = TESTradSesStatus_ReadStrptrMaybe(parent, strval);
7183 if (retval) {
7184 pmask_qSetBit(parent, 19);
7185 }
7186 break;
7187 }
7188 case emdi12_FieldId_SecurityTradingStatus: {
7189 retval = SecurityTradingStatus_ReadStrptrMaybe(parent, strval);
7190 if (retval) {
7191 pmask_qSetBit(parent, 17);
7192 }
7193 break;
7194 }
7195 case emdi12_FieldId_MarketCondition: {
7196 retval = MarketCondition_ReadStrptrMaybe(parent, strval);
7197 if (retval) {
7198 pmask_qSetBit(parent, 9);
7199 }
7200 break;
7201 }
7202 case emdi12_FieldId_FastMarketIndicator: {
7203 retval = FastMarketIndicator_ReadStrptrMaybe(parent, strval);
7204 if (retval) {
7205 pmask_qSetBit(parent, 0);
7206 }
7207 break;
7208 }
7209 case emdi12_FieldId_SecurityTradingEvent: {
7210 retval = SecurityTradingEvent_ReadStrptrMaybe(parent, strval);
7211 if (retval) {
7212 pmask_qSetBit(parent, 16);
7213 }
7214 break;
7215 }
7216 case emdi12_FieldId_PotentialSecurityTradingEvent: {
7217 retval = PotentialSecurityTradingEvent_ReadStrptrMaybe(parent, strval);
7218 if (retval) {
7219 pmask_qSetBit(parent, 14);
7220 }
7221 break;
7222 }
7223 case emdi12_FieldId_SoldOutIndicator: {
7224 retval = SoldOutIndicator_ReadStrptrMaybe(parent, strval);
7225 if (retval) {
7226 pmask_qSetBit(parent, 18);
7227 }
7228 break;
7229 }
7230 case emdi12_FieldId_HighPx: {
7231 retval = HighPx_ReadStrptrMaybe(parent, strval);
7232 if (retval) {
7233 pmask_qSetBit(parent, 1);
7234 }
7235 break;
7236 }
7237 case emdi12_FieldId_LowPx: {
7238 retval = LowPx_ReadStrptrMaybe(parent, strval);
7239 if (retval) {
7240 pmask_qSetBit(parent, 2);
7241 }
7242 break;
7243 }
7244 case emdi12_FieldId_TradeCondition: {
7245 retval = TradeCondition_ReadStrptrMaybe(parent, strval);
7246 if (retval) {
7247 pmask_qSetBit(parent, 21);
7248 }
7249 break;
7250 }
7251 case emdi12_FieldId_MultiLegReportingType: {
7252 retval = MultiLegReportingType_ReadStrptrMaybe(parent, strval);
7253 if (retval) {
7254 pmask_qSetBit(parent, 11);
7255 }
7256 break;
7257 }
7258 case emdi12_FieldId_MultiLegPriceModel: {
7259 retval = MultiLegPriceModel_ReadStrptrMaybe(parent, strval);
7260 if (retval) {
7261 pmask_qSetBit(parent, 10);
7262 }
7263 break;
7264 }
7265 case emdi12_FieldId_QuoteCondition: {
7266 retval = QuoteCondition_ReadStrptrMaybe(parent, strval);
7267 if (retval) {
7268 pmask_qSetBit(parent, 15);
7269 }
7270 break;
7271 }
7272 case emdi12_FieldId_MDEntryPx: {
7273 retval = MDEntryPx_ReadStrptrMaybe(parent, strval);
7274 if (retval) {
7275 pmask_qSetBit(parent, 4);
7276 }
7277 break;
7278 }
7279 case emdi12_FieldId_MDEntrySize: {
7280 retval = MDEntrySize_ReadStrptrMaybe(parent, strval);
7281 if (retval) {
7282 pmask_qSetBit(parent, 5);
7283 }
7284 break;
7285 }
7286 case emdi12_FieldId_NumberOfOrders: {
7287 retval = NumberOfOrders_ReadStrptrMaybe(parent, strval);
7288 if (retval) {
7289 pmask_qSetBit(parent, 13);
7290 }
7291 break;
7292 }
7293 case emdi12_FieldId_MDPriceLevel: {
7294 retval = MDPriceLevel_ReadStrptrMaybe(parent, strval);
7295 if (retval) {
7296 pmask_qSetBit(parent, 7);
7297 }
7298 break;
7299 }
7300 case emdi12_FieldId_MDEntryTime: {
7301 retval = MDEntryTime_ReadStrptrMaybe(parent, strval);
7302 if (retval) {
7303 pmask_qSetBit(parent, 6);
7304 }
7305 break;
7306 }
7307 case emdi12_FieldId_NonDisclosedTradeVolume: {
7308 retval = NonDisclosedTradeVolume_ReadStrptrMaybe(parent, strval);
7309 if (retval) {
7310 pmask_qSetBit(parent, 12);
7311 }
7312 break;
7313 }
7314 case emdi12_FieldId_TotalNumOfTrades: {
7315 retval = TotalNumOfTrades_ReadStrptrMaybe(parent, strval);
7316 if (retval) {
7317 pmask_qSetBit(parent, 20);
7318 }
7319 break;
7320 }
7321 default: break;
7322 }
7323 if (!retval) {
7324 algo_lib::AppendErrtext("attr",field);
7325 }
7326 return retval;
7327}
7328
7329// --- emdi12.MDSshGrp..ReadStrptrMaybe
7330// Read fields of emdi12::MDSshGrp from an ascii string.
7331// The format of the string is an ssim Tuple
7332bool emdi12::MDSshGrp_ReadStrptrMaybe(emdi12::MDSshGrp &parent, algo::strptr in_str) {
7333 bool retval = true;
7334 retval = algo::StripTypeTag(in_str, "emdi12.MDSshGrp");
7335 ind_beg(algo::Attr_curs, attr, in_str) {
7336 retval = retval && MDSshGrp_ReadFieldMaybe(parent, attr.name, attr.value);
7337 }ind_end;
7338 return retval;
7339}
7340
7341// --- emdi12.MDSshGrp..Init
7342// Set all fields to initial values.
7343void emdi12::MDSshGrp_Init(emdi12::MDSshGrp& MDSshGrp) {
7344 MDSshGrp.pmask = u32(0);
7345 MDSshGrp.MDOriginType = emdi12_MDOriginTypeEnum(0);
7346 MDSshGrp.HighPx = algo::Decimal(algo::Decimal(0,0));
7347 MDSshGrp.LowPx = algo::Decimal(algo::Decimal(0,0));
7348 MDSshGrp.MDEntryPx = algo::Decimal(algo::Decimal(0,0));
7349 MDSshGrp.MDEntrySize = algo::Decimal(algo::Decimal(0,0));
7350 MDSshGrp.NumberOfOrders = u32(0);
7351 MDSshGrp.MDPriceLevel = u32(0);
7352 MDSshGrp.MDEntryTime = i64(0);
7353 MDSshGrp.NonDisclosedTradeVolume = algo::Decimal(algo::Decimal(0,0));
7354 MDSshGrp.TotalNumOfTrades = u32(0);
7355}
7356
7357// --- emdi12.MDSshGrp..Print
7358// print string representation of ROW to string STR
7359// cfmt:emdi12.MDSshGrp.String printfmt:Tuple
7360void emdi12::MDSshGrp_Print(emdi12::MDSshGrp& row, algo::cstring& str) {
7361 algo::tempstr temp;
7362 str << "emdi12.MDSshGrp";
7363
7364 emdi12::MDOriginType_Print(row.MDOriginType, temp);
7365 PrintAttrSpaceReset(str,"MDOriginType", temp);
7366
7367 emdi12::MDEntryType_Print(row.MDEntryType, temp);
7368 PrintAttrSpaceReset(str,"MDEntryType", temp);
7369
7370 if (MDBookType_PresentQ(row)) {
7371 emdi12::MDBookType_Print(row.MDBookType, temp);
7372 PrintAttrSpaceReset(str,"MDBookType", temp);
7373 }
7374
7375 if (MDSubBookType_PresentQ(row)) {
7376 emdi12::MDSubBookType_Print(row.MDSubBookType, temp);
7377 PrintAttrSpaceReset(str,"MDSubBookType", temp);
7378 }
7379
7380 if (TrdType_PresentQ(row)) {
7381 emdi12::TrdType_Print(row.TrdType, temp);
7382 PrintAttrSpaceReset(str,"TrdType", temp);
7383 }
7384
7385 if (TradingSessionID_PresentQ(row)) {
7386 emdi12::TradingSessionID_Print(row.TradingSessionID, temp);
7387 PrintAttrSpaceReset(str,"TradingSessionID", temp);
7388 }
7389
7390 if (TradingSessionSubID_PresentQ(row)) {
7391 emdi12::TradingSessionSubID_Print(row.TradingSessionSubID, temp);
7392 PrintAttrSpaceReset(str,"TradingSessionSubID", temp);
7393 }
7394
7395 if (TESTradSesStatus_PresentQ(row)) {
7396 emdi12::TradSesStatus_Print(row.TESTradSesStatus, temp);
7397 PrintAttrSpaceReset(str,"TESTradSesStatus", temp);
7398 }
7399
7400 if (SecurityTradingStatus_PresentQ(row)) {
7401 emdi12::SecurityTradingStatus_Print(row.SecurityTradingStatus, temp);
7402 PrintAttrSpaceReset(str,"SecurityTradingStatus", temp);
7403 }
7404
7405 if (MarketCondition_PresentQ(row)) {
7406 emdi12::MarketCondition_Print(row.MarketCondition, temp);
7407 PrintAttrSpaceReset(str,"MarketCondition", temp);
7408 }
7409
7410 if (FastMarketIndicator_PresentQ(row)) {
7411 emdi12::FastMarketIndicator_Print(row.FastMarketIndicator, temp);
7412 PrintAttrSpaceReset(str,"FastMarketIndicator", temp);
7413 }
7414
7415 if (SecurityTradingEvent_PresentQ(row)) {
7416 emdi12::SecurityTradingEvent_Print(row.SecurityTradingEvent, temp);
7417 PrintAttrSpaceReset(str,"SecurityTradingEvent", temp);
7418 }
7419
7420 if (PotentialSecurityTradingEvent_PresentQ(row)) {
7421 emdi12::SecurityTradingEvent_Print(row.PotentialSecurityTradingEvent, temp);
7422 PrintAttrSpaceReset(str,"PotentialSecurityTradingEvent", temp);
7423 }
7424
7425 if (SoldOutIndicator_PresentQ(row)) {
7426 emdi12::SoldOutIndicator_Print(row.SoldOutIndicator, temp);
7427 PrintAttrSpaceReset(str,"SoldOutIndicator", temp);
7428 }
7429
7430 if (HighPx_PresentQ(row)) {
7431 algo::Decimal_Print(row.HighPx, temp);
7432 PrintAttrSpaceReset(str,"HighPx", temp);
7433 }
7434
7435 if (LowPx_PresentQ(row)) {
7436 algo::Decimal_Print(row.LowPx, temp);
7437 PrintAttrSpaceReset(str,"LowPx", temp);
7438 }
7439
7440 if (TradeCondition_PresentQ(row)) {
7441 emdi12::TradeConditionSet_Print(row.TradeCondition, temp);
7442 PrintAttrSpaceReset(str,"TradeCondition", temp);
7443 }
7444
7445 if (MultiLegReportingType_PresentQ(row)) {
7446 emdi12::MultiLegReportingType_Print(row.MultiLegReportingType, temp);
7447 PrintAttrSpaceReset(str,"MultiLegReportingType", temp);
7448 }
7449
7450 if (MultiLegPriceModel_PresentQ(row)) {
7451 emdi12::MultiLegPriceModel_Print(row.MultiLegPriceModel, temp);
7452 PrintAttrSpaceReset(str,"MultiLegPriceModel", temp);
7453 }
7454
7455 if (QuoteCondition_PresentQ(row)) {
7456 emdi12::QuoteCondition_Print(row.QuoteCondition, temp);
7457 PrintAttrSpaceReset(str,"QuoteCondition", temp);
7458 }
7459
7460 if (MDEntryPx_PresentQ(row)) {
7461 algo::Decimal_Print(row.MDEntryPx, temp);
7462 PrintAttrSpaceReset(str,"MDEntryPx", temp);
7463 }
7464
7465 if (MDEntrySize_PresentQ(row)) {
7466 algo::Decimal_Print(row.MDEntrySize, temp);
7467 PrintAttrSpaceReset(str,"MDEntrySize", temp);
7468 }
7469
7470 if (NumberOfOrders_PresentQ(row)) {
7471 u32_Print(row.NumberOfOrders, temp);
7472 PrintAttrSpaceReset(str,"NumberOfOrders", temp);
7473 }
7474
7475 if (MDPriceLevel_PresentQ(row)) {
7476 u32_Print(row.MDPriceLevel, temp);
7477 PrintAttrSpaceReset(str,"MDPriceLevel", temp);
7478 }
7479
7480 if (MDEntryTime_PresentQ(row)) {
7481 i64_Print(row.MDEntryTime, temp);
7482 PrintAttrSpaceReset(str,"MDEntryTime", temp);
7483 }
7484
7485 if (NonDisclosedTradeVolume_PresentQ(row)) {
7486 algo::Decimal_Print(row.NonDisclosedTradeVolume, temp);
7487 PrintAttrSpaceReset(str,"NonDisclosedTradeVolume", temp);
7488 }
7489
7490 if (TotalNumOfTrades_PresentQ(row)) {
7491 u32_Print(row.TotalNumOfTrades, temp);
7492 PrintAttrSpaceReset(str,"TotalNumOfTrades", temp);
7493 }
7494}
7495
7496// --- emdi12.MDSshGrp..FastEncode
7497void emdi12::MDSshGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MDSshGrp& parent) {
7498 int index = ary_N(buf);
7499 u64 pmap(0);
7500 // MDOriginType type default mandatory
7501 if (parent.MDOriginType.value != 0) {
7502 lib_fast::EncodeUnsigned(buf,parent.MDOriginType.value,false);
7503 lib_fast::SetPmapBit(pmap,0);
7504 }
7505 // MDEntryType type copy mandatory
7506 if (!MDEntryType_AssignedQ(state) || parent.MDEntryType.value != state.MDEntryType.value) {
7507 lib_fast::EncodeUnsigned(buf,parent.MDEntryType.value,false);
7508 lib_fast::SetPmapBit(pmap,1);
7509 }
7510 state.MDEntryType.value = parent.MDEntryType.value;
7511 MDEntryType_SetAssigned(state);
7512 // MDBookType type copy optional
7513 if (MDBookType_PresentQ(parent)) {
7514 if (!MDBookType_AssignedQ(state) || !MDBookType_PresentQ(state) || parent.MDBookType.value != state.MDBookType.value ) {
7515 lib_fast::EncodeUnsigned(buf,parent.MDBookType.value,true);
7516 lib_fast::SetPmapBit(pmap,2);
7517 }
7518 } else {
7519 if (MDBookType_AssignedQ(state)) {
7520 lib_fast::EncodeNull(buf);
7521 lib_fast::SetPmapBit(pmap,2);
7522 }
7523 }
7524 state.MDBookType.value = parent.MDBookType.value;
7525 present_qSetBitVal(state,MDBookType_Present_GetBit(state),MDBookType_PresentQ(parent));
7526 MDBookType_SetAssigned(state);
7527 // MDSubBookType type copy optional
7528 if (MDSubBookType_PresentQ(parent)) {
7529 if (!MDSubBookType_AssignedQ(state) || !MDSubBookType_PresentQ(state) || parent.MDSubBookType.value != state.MDSubBookType.value ) {
7530 lib_fast::EncodeUnsigned(buf,parent.MDSubBookType.value,true);
7531 lib_fast::SetPmapBit(pmap,3);
7532 }
7533 } else {
7534 if (MDSubBookType_AssignedQ(state)) {
7535 lib_fast::EncodeNull(buf);
7536 lib_fast::SetPmapBit(pmap,3);
7537 }
7538 }
7539 state.MDSubBookType.value = parent.MDSubBookType.value;
7540 present_qSetBitVal(state,MDSubBookType_Present_GetBit(state),MDSubBookType_PresentQ(parent));
7541 MDSubBookType_SetAssigned(state);
7542 // TrdType type default optional
7543 if (TrdType_PresentQ(parent)) {
7544 lib_fast::EncodeUnsigned(buf,parent.TrdType.value,true);
7545 lib_fast::SetPmapBit(pmap,4);
7546 }
7547 // TradingSessionID type default optional
7548 if (TradingSessionID_PresentQ(parent)) {
7549 lib_fast::EncodeUnsigned(buf,parent.TradingSessionID.value,true);
7550 lib_fast::SetPmapBit(pmap,5);
7551 }
7552 // TradingSessionSubID type default optional
7553 if (TradingSessionSubID_PresentQ(parent)) {
7554 lib_fast::EncodeUnsigned(buf,parent.TradingSessionSubID.value,true);
7555 lib_fast::SetPmapBit(pmap,6);
7556 }
7557 // TESTradSesStatus type default optional
7558 if (TESTradSesStatus_PresentQ(parent)) {
7559 lib_fast::EncodeUnsigned(buf,parent.TESTradSesStatus.value,true);
7560 lib_fast::SetPmapBit(pmap,7);
7561 }
7562 // SecurityTradingStatus type default optional
7563 if (SecurityTradingStatus_PresentQ(parent)) {
7564 lib_fast::EncodeUnsigned(buf,parent.SecurityTradingStatus.value,true);
7565 lib_fast::SetPmapBit(pmap,8);
7566 }
7567 // MarketCondition type default optional
7568 if (MarketCondition_PresentQ(parent)) {
7569 lib_fast::EncodeUnsigned(buf,parent.MarketCondition.value,true);
7570 lib_fast::SetPmapBit(pmap,9);
7571 }
7572 // FastMarketIndicator type default optional
7573 if (FastMarketIndicator_PresentQ(parent)) {
7574 lib_fast::EncodeUnsigned(buf,parent.FastMarketIndicator.value,true);
7575 lib_fast::SetPmapBit(pmap,10);
7576 }
7577 // SecurityTradingEvent type default optional
7578 if (SecurityTradingEvent_PresentQ(parent)) {
7579 lib_fast::EncodeUnsigned(buf,parent.SecurityTradingEvent.value,true);
7580 lib_fast::SetPmapBit(pmap,11);
7581 }
7582 // PotentialSecurityTradingEvent type default optional
7583 if (PotentialSecurityTradingEvent_PresentQ(parent)) {
7584 lib_fast::EncodeUnsigned(buf,parent.PotentialSecurityTradingEvent.value,true);
7585 lib_fast::SetPmapBit(pmap,12);
7586 }
7587 // SoldOutIndicator type default optional
7588 if (SoldOutIndicator_PresentQ(parent)) {
7589 lib_fast::EncodeUnsigned(buf,parent.SoldOutIndicator.value,true);
7590 lib_fast::SetPmapBit(pmap,13);
7591 }
7592 // HighPx scaled delta optional
7593 if (!HighPx_AssignedQ(state)) {
7594 HighPx_SetAssigned(state);
7595 present_qSetBitVal(state,HighPx_Present_GetBit(state),HighPx_PresentQ(parent));
7596 state.HighPx = algo::Decimal(0,0);
7597 }
7598 if (HighPx_PresentQ(parent)) {
7599 if (!HighPx_PresentQ(state)) {
7600 state.HighPx = algo::Decimal(0,0);
7601 }
7602 lib_fast::EncodeDeltaScaled(buf,state.HighPx,parent.HighPx,true);
7603 } else {
7604 lib_fast::EncodeNull(buf);
7605 }
7606 state.HighPx = parent.HighPx;
7607 present_qSetBitVal(state,HighPx_Present_GetBit(state),HighPx_PresentQ(parent));
7608 // LowPx scaled delta optional
7609 if (!LowPx_AssignedQ(state)) {
7610 LowPx_SetAssigned(state);
7611 present_qSetBitVal(state,LowPx_Present_GetBit(state),LowPx_PresentQ(parent));
7612 state.LowPx = algo::Decimal(0,0);
7613 }
7614 if (LowPx_PresentQ(parent)) {
7615 if (!LowPx_PresentQ(state)) {
7616 state.LowPx = algo::Decimal(0,0);
7617 }
7618 lib_fast::EncodeDeltaScaled(buf,state.LowPx,parent.LowPx,true);
7619 } else {
7620 lib_fast::EncodeNull(buf);
7621 }
7622 state.LowPx = parent.LowPx;
7623 present_qSetBitVal(state,LowPx_Present_GetBit(state),LowPx_PresentQ(parent));
7624 // TradeCondition type default optional
7625 if (TradeCondition_PresentQ(parent)) {
7626 lib_fast::EncodeUnsigned(buf,parent.TradeCondition.value,true);
7627 lib_fast::SetPmapBit(pmap,14);
7628 }
7629 // MultiLegReportingType type default optional
7630 if (MultiLegReportingType_PresentQ(parent)) {
7631 lib_fast::EncodeUnsigned(buf,parent.MultiLegReportingType.value,true);
7632 lib_fast::SetPmapBit(pmap,15);
7633 }
7634 // MultiLegPriceModel type default optional
7635 if (MultiLegPriceModel_PresentQ(parent)) {
7636 lib_fast::EncodeUnsigned(buf,parent.MultiLegPriceModel.value,true);
7637 lib_fast::SetPmapBit(pmap,16);
7638 }
7639 // QuoteCondition type copy optional
7640 if (QuoteCondition_PresentQ(parent)) {
7641 if (!QuoteCondition_AssignedQ(state) || !QuoteCondition_PresentQ(state) || parent.QuoteCondition.value != state.QuoteCondition.value ) {
7642 lib_fast::EncodeUnsigned(buf,parent.QuoteCondition.value,true);
7643 lib_fast::SetPmapBit(pmap,17);
7644 }
7645 } else {
7646 if (QuoteCondition_AssignedQ(state)) {
7647 lib_fast::EncodeNull(buf);
7648 lib_fast::SetPmapBit(pmap,17);
7649 }
7650 }
7651 state.QuoteCondition.value = parent.QuoteCondition.value;
7652 present_qSetBitVal(state,QuoteCondition_Present_GetBit(state),QuoteCondition_PresentQ(parent));
7653 QuoteCondition_SetAssigned(state);
7654 // MDEntryPx scaled delta optional
7655 if (!MDEntryPx_AssignedQ(state)) {
7656 MDEntryPx_SetAssigned(state);
7657 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
7658 state.MDEntryPx = algo::Decimal(0,0);
7659 }
7660 if (MDEntryPx_PresentQ(parent)) {
7661 if (!MDEntryPx_PresentQ(state)) {
7662 state.MDEntryPx = algo::Decimal(0,0);
7663 }
7664 lib_fast::EncodeDeltaScaled(buf,state.MDEntryPx,parent.MDEntryPx,true);
7665 } else {
7666 lib_fast::EncodeNull(buf);
7667 }
7668 state.MDEntryPx = parent.MDEntryPx;
7669 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
7670 // MDEntrySize scaled delta optional
7671 if (!MDEntrySize_AssignedQ(state)) {
7672 MDEntrySize_SetAssigned(state);
7673 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
7674 state.MDEntrySize = algo::Decimal(0,0);
7675 }
7676 if (MDEntrySize_PresentQ(parent)) {
7677 if (!MDEntrySize_PresentQ(state)) {
7678 state.MDEntrySize = algo::Decimal(0,0);
7679 }
7680 lib_fast::EncodeDeltaScaled(buf,state.MDEntrySize,parent.MDEntrySize,true);
7681 } else {
7682 lib_fast::EncodeNull(buf);
7683 }
7684 state.MDEntrySize = parent.MDEntrySize;
7685 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
7686 // NumberOfOrders unsigned delta optional
7687 if (!NumberOfOrders_AssignedQ(state)) {
7688 NumberOfOrders_SetAssigned(state);
7689 present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),NumberOfOrders_PresentQ(parent));
7690 state.NumberOfOrders = 0;
7691 }
7692 if (NumberOfOrders_PresentQ(parent)) {
7693 if (!NumberOfOrders_PresentQ(state)) {
7694 state.NumberOfOrders = 0;
7695 }
7696 lib_fast::EncodeDeltaUnsigned(buf,state.NumberOfOrders,parent.NumberOfOrders,true);
7697 } else {
7698 lib_fast::EncodeNull(buf);
7699 }
7700 state.NumberOfOrders = parent.NumberOfOrders;
7701 present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),NumberOfOrders_PresentQ(parent));
7702 // MDPriceLevel unsigned increment optional
7703 if (MDPriceLevel_PresentQ(parent)) {
7704 if (MDPriceLevel_AssignedQ(state)) {
7705 if (!MDPriceLevel_PresentQ(state) || parent.MDPriceLevel != state.MDPriceLevel + 1) {
7706 lib_fast::EncodeUnsigned(buf,parent.MDPriceLevel,true);
7707 lib_fast::SetPmapBit(pmap,18);
7708 }
7709 } else {
7710 lib_fast::EncodeUnsigned(buf,parent.MDPriceLevel,true);
7711 lib_fast::SetPmapBit(pmap,18);
7712 }
7713 } else {
7714 if (!MDPriceLevel_AssignedQ(state) || MDPriceLevel_PresentQ(state)) {
7715 lib_fast::EncodeNull(buf);
7716 lib_fast::SetPmapBit(pmap,18);
7717 }
7718 }
7719 state.MDPriceLevel = parent.MDPriceLevel;
7720 present_qSetBitVal(state,MDPriceLevel_Present_GetBit(state),MDPriceLevel_PresentQ(parent));
7721 MDPriceLevel_SetAssigned(state);
7722 // MDEntryTime signed delta optional
7723 if (!MDEntryTime_AssignedQ(state)) {
7724 MDEntryTime_SetAssigned(state);
7725 present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),MDEntryTime_PresentQ(parent));
7726 state.MDEntryTime = 0;
7727 }
7728 if (MDEntryTime_PresentQ(parent)) {
7729 if (!MDEntryTime_PresentQ(state)) {
7730 state.MDEntryTime = 0;
7731 }
7732 lib_fast::EncodeDeltaSigned(buf,state.MDEntryTime,parent.MDEntryTime,true);
7733 } else {
7734 lib_fast::EncodeNull(buf);
7735 }
7736 state.MDEntryTime = parent.MDEntryTime;
7737 present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),MDEntryTime_PresentQ(parent));
7738 // NonDisclosedTradeVolume scaled default optional
7739 if (NonDisclosedTradeVolume_PresentQ(parent)) {
7740 if (parent.NonDisclosedTradeVolume != algo::Decimal(0,0)) {
7741 lib_fast::EncodeScaled(buf,parent.NonDisclosedTradeVolume,true);
7742 lib_fast::SetPmapBit(pmap,19);
7743 }
7744 } else {
7745 lib_fast::EncodeNull(buf);
7746 lib_fast::SetPmapBit(pmap,19);
7747 }
7748 // TotalNumOfTrades unsigned default optional
7749 if (TotalNumOfTrades_PresentQ(parent)) {
7750 lib_fast::EncodeUnsigned(buf,parent.TotalNumOfTrades,true);
7751 lib_fast::SetPmapBit(pmap,20);
7752 }
7753 lib_fast::InsertPmap(buf,index,pmap);
7754}
7755
7756// --- emdi12.MDSshGrp..FastDecode
7757bool emdi12::MDSshGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::MDSshGrp& parent) {
7758 bool ok = true;
7759 u64 pmap;
7760 ok = lib_fast::DecodePmap(from,pmap);
7761 if (!ok) {
7762 state.error << "emdi12.MDSshGrp: bad pmap" << eol;
7763 }
7764 // MDOriginType type default mandatory
7765 if (ok) {
7766 bool prs = lib_fast::GetPmapBit(pmap,0);
7767 if (prs) {
7768 ok = lib_fast::DecodeUnsigned(from,parent.MDOriginType.value,false);
7769 if (!ok) {
7770 state.error << "emdi12.MDSshGrp.MDOriginType: bad Unsigned" << eol;
7771 }
7772 } else {
7773 parent.MDOriginType.value = 0;
7774 }
7775 }
7776 // MDEntryType type copy mandatory
7777 if (ok) {
7778 bool prs = lib_fast::GetPmapBit(pmap,1);
7779 if (prs) {
7780 ok = lib_fast::DecodeUnsigned(from,parent.MDEntryType.value,false);
7781 if (!ok) {
7782 state.error << "emdi12.MDSshGrp.MDEntryType: bad Unsigned" << eol;
7783 }
7784 } else if (MDEntryType_AssignedQ(state)) {
7785 parent.MDEntryType.value = state.MDEntryType.value;
7786 } else {
7787 ok = false;
7788 state.error << "emdi12.MDSshGrp.MDEntryType: copy operator: previous value unassigned" << eol;
7789 }
7790 MDEntryType_SetAssigned(state);
7791 state.MDEntryType.value = parent.MDEntryType.value;
7792 }
7793 // MDBookType type copy optional
7794 if (ok) {
7795 bool prs = lib_fast::GetPmapBit(pmap,2);
7796 if (prs) {
7797 prs = !lib_fast::DecodeNull(from);
7798 if (prs) {
7799 ok = lib_fast::DecodeUnsigned(from,parent.MDBookType.value,true);
7800 if (!ok) {
7801 state.error << "emdi12.MDSshGrp.MDBookType: bad Unsigned" << eol;
7802 }
7803 }
7804 } else if (MDBookType_AssignedQ(state)) {
7805 parent.MDBookType.value = state.MDBookType.value;
7806 prs = MDBookType_PresentQ(state);
7807 } else {
7808 prs = false;
7809 }
7810 pmask_qSetBitVal(parent,MDBookType_Present_GetBit(parent),prs);
7811 MDBookType_SetAssigned(state);
7812 present_qSetBitVal(state,MDBookType_Present_GetBit(state),prs);
7813 state.MDBookType.value = parent.MDBookType.value;
7814 }
7815 // MDSubBookType type copy optional
7816 if (ok) {
7817 bool prs = lib_fast::GetPmapBit(pmap,3);
7818 if (prs) {
7819 prs = !lib_fast::DecodeNull(from);
7820 if (prs) {
7821 ok = lib_fast::DecodeUnsigned(from,parent.MDSubBookType.value,true);
7822 if (!ok) {
7823 state.error << "emdi12.MDSshGrp.MDSubBookType: bad Unsigned" << eol;
7824 }
7825 }
7826 } else if (MDSubBookType_AssignedQ(state)) {
7827 parent.MDSubBookType.value = state.MDSubBookType.value;
7828 prs = MDSubBookType_PresentQ(state);
7829 } else {
7830 prs = false;
7831 }
7832 pmask_qSetBitVal(parent,MDSubBookType_Present_GetBit(parent),prs);
7833 MDSubBookType_SetAssigned(state);
7834 present_qSetBitVal(state,MDSubBookType_Present_GetBit(state),prs);
7835 state.MDSubBookType.value = parent.MDSubBookType.value;
7836 }
7837 // TrdType type default optional
7838 if (ok) {
7839 bool prs = lib_fast::GetPmapBit(pmap,4);
7840 if (prs) {
7841 prs = !lib_fast::DecodeNull(from);
7842 if (prs) {
7843 ok = lib_fast::DecodeUnsigned(from,parent.TrdType.value,true);
7844 if (!ok) {
7845 state.error << "emdi12.MDSshGrp.TrdType: bad Unsigned" << eol;
7846 }
7847 }
7848 } else {
7849 }
7850 pmask_qSetBitVal(parent,TrdType_Present_GetBit(parent),prs);
7851 }
7852 // TradingSessionID type default optional
7853 if (ok) {
7854 bool prs = lib_fast::GetPmapBit(pmap,5);
7855 if (prs) {
7856 prs = !lib_fast::DecodeNull(from);
7857 if (prs) {
7858 ok = lib_fast::DecodeUnsigned(from,parent.TradingSessionID.value,true);
7859 if (!ok) {
7860 state.error << "emdi12.MDSshGrp.TradingSessionID: bad Unsigned" << eol;
7861 }
7862 }
7863 } else {
7864 }
7865 pmask_qSetBitVal(parent,TradingSessionID_Present_GetBit(parent),prs);
7866 }
7867 // TradingSessionSubID type default optional
7868 if (ok) {
7869 bool prs = lib_fast::GetPmapBit(pmap,6);
7870 if (prs) {
7871 prs = !lib_fast::DecodeNull(from);
7872 if (prs) {
7873 ok = lib_fast::DecodeUnsigned(from,parent.TradingSessionSubID.value,true);
7874 if (!ok) {
7875 state.error << "emdi12.MDSshGrp.TradingSessionSubID: bad Unsigned" << eol;
7876 }
7877 }
7878 } else {
7879 }
7880 pmask_qSetBitVal(parent,TradingSessionSubID_Present_GetBit(parent),prs);
7881 }
7882 // TESTradSesStatus type default optional
7883 if (ok) {
7884 bool prs = lib_fast::GetPmapBit(pmap,7);
7885 if (prs) {
7886 prs = !lib_fast::DecodeNull(from);
7887 if (prs) {
7888 ok = lib_fast::DecodeUnsigned(from,parent.TESTradSesStatus.value,true);
7889 if (!ok) {
7890 state.error << "emdi12.MDSshGrp.TESTradSesStatus: bad Unsigned" << eol;
7891 }
7892 }
7893 } else {
7894 }
7895 pmask_qSetBitVal(parent,TESTradSesStatus_Present_GetBit(parent),prs);
7896 }
7897 // SecurityTradingStatus type default optional
7898 if (ok) {
7899 bool prs = lib_fast::GetPmapBit(pmap,8);
7900 if (prs) {
7901 prs = !lib_fast::DecodeNull(from);
7902 if (prs) {
7903 ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingStatus.value,true);
7904 if (!ok) {
7905 state.error << "emdi12.MDSshGrp.SecurityTradingStatus: bad Unsigned" << eol;
7906 }
7907 }
7908 } else {
7909 }
7910 pmask_qSetBitVal(parent,SecurityTradingStatus_Present_GetBit(parent),prs);
7911 }
7912 // MarketCondition type default optional
7913 if (ok) {
7914 bool prs = lib_fast::GetPmapBit(pmap,9);
7915 if (prs) {
7916 prs = !lib_fast::DecodeNull(from);
7917 if (prs) {
7918 ok = lib_fast::DecodeUnsigned(from,parent.MarketCondition.value,true);
7919 if (!ok) {
7920 state.error << "emdi12.MDSshGrp.MarketCondition: bad Unsigned" << eol;
7921 }
7922 }
7923 } else {
7924 }
7925 pmask_qSetBitVal(parent,MarketCondition_Present_GetBit(parent),prs);
7926 }
7927 // FastMarketIndicator type default optional
7928 if (ok) {
7929 bool prs = lib_fast::GetPmapBit(pmap,10);
7930 if (prs) {
7931 prs = !lib_fast::DecodeNull(from);
7932 if (prs) {
7933 ok = lib_fast::DecodeUnsigned(from,parent.FastMarketIndicator.value,true);
7934 if (!ok) {
7935 state.error << "emdi12.MDSshGrp.FastMarketIndicator: bad Unsigned" << eol;
7936 }
7937 }
7938 } else {
7939 }
7940 pmask_qSetBitVal(parent,FastMarketIndicator_Present_GetBit(parent),prs);
7941 }
7942 // SecurityTradingEvent type default optional
7943 if (ok) {
7944 bool prs = lib_fast::GetPmapBit(pmap,11);
7945 if (prs) {
7946 prs = !lib_fast::DecodeNull(from);
7947 if (prs) {
7948 ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingEvent.value,true);
7949 if (!ok) {
7950 state.error << "emdi12.MDSshGrp.SecurityTradingEvent: bad Unsigned" << eol;
7951 }
7952 }
7953 } else {
7954 }
7955 pmask_qSetBitVal(parent,SecurityTradingEvent_Present_GetBit(parent),prs);
7956 }
7957 // PotentialSecurityTradingEvent type default optional
7958 if (ok) {
7959 bool prs = lib_fast::GetPmapBit(pmap,12);
7960 if (prs) {
7961 prs = !lib_fast::DecodeNull(from);
7962 if (prs) {
7963 ok = lib_fast::DecodeUnsigned(from,parent.PotentialSecurityTradingEvent.value,true);
7964 if (!ok) {
7965 state.error << "emdi12.MDSshGrp.PotentialSecurityTradingEvent: bad Unsigned" << eol;
7966 }
7967 }
7968 } else {
7969 }
7970 pmask_qSetBitVal(parent,PotentialSecurityTradingEvent_Present_GetBit(parent),prs);
7971 }
7972 // SoldOutIndicator type default optional
7973 if (ok) {
7974 bool prs = lib_fast::GetPmapBit(pmap,13);
7975 if (prs) {
7976 prs = !lib_fast::DecodeNull(from);
7977 if (prs) {
7978 ok = lib_fast::DecodeUnsigned(from,parent.SoldOutIndicator.value,true);
7979 if (!ok) {
7980 state.error << "emdi12.MDSshGrp.SoldOutIndicator: bad Unsigned" << eol;
7981 }
7982 }
7983 } else {
7984 }
7985 pmask_qSetBitVal(parent,SoldOutIndicator_Present_GetBit(parent),prs);
7986 }
7987 // HighPx scaled delta optional
7988 if (ok) {
7989 if (!HighPx_AssignedQ(state)) {
7990 HighPx_SetAssigned(state);
7991 bool prs(true);
7992 present_qSetBitVal(state,HighPx_Present_GetBit(state),prs);
7993 state.HighPx = algo::Decimal(0,0);
7994 }
7995 bool prs = !lib_fast::DecodeNull(from);
7996 if (prs) {
7997 if (!HighPx_PresentQ(state)) {
7998 state.HighPx = algo::Decimal(0,0);
7999 }
8000 ok = lib_fast::DecodeDeltaScaled(from,state.HighPx,parent.HighPx,true);
8001 if (!ok) {
8002 state.error << "emdi12.MDSshGrp.HighPx: bad Scaled delta" << eol;
8003 }
8004 state.HighPx = parent.HighPx;
8005 }
8006 pmask_qSetBitVal(parent,HighPx_Present_GetBit(parent),prs);
8007 present_qSetBitVal(state,HighPx_Present_GetBit(state),prs);
8008 }
8009 // LowPx scaled delta optional
8010 if (ok) {
8011 if (!LowPx_AssignedQ(state)) {
8012 LowPx_SetAssigned(state);
8013 bool prs(true);
8014 present_qSetBitVal(state,LowPx_Present_GetBit(state),prs);
8015 state.LowPx = algo::Decimal(0,0);
8016 }
8017 bool prs = !lib_fast::DecodeNull(from);
8018 if (prs) {
8019 if (!LowPx_PresentQ(state)) {
8020 state.LowPx = algo::Decimal(0,0);
8021 }
8022 ok = lib_fast::DecodeDeltaScaled(from,state.LowPx,parent.LowPx,true);
8023 if (!ok) {
8024 state.error << "emdi12.MDSshGrp.LowPx: bad Scaled delta" << eol;
8025 }
8026 state.LowPx = parent.LowPx;
8027 }
8028 pmask_qSetBitVal(parent,LowPx_Present_GetBit(parent),prs);
8029 present_qSetBitVal(state,LowPx_Present_GetBit(state),prs);
8030 }
8031 // TradeCondition type default optional
8032 if (ok) {
8033 bool prs = lib_fast::GetPmapBit(pmap,14);
8034 if (prs) {
8035 prs = !lib_fast::DecodeNull(from);
8036 if (prs) {
8037 ok = lib_fast::DecodeUnsigned(from,parent.TradeCondition.value,true);
8038 if (!ok) {
8039 state.error << "emdi12.MDSshGrp.TradeCondition: bad Unsigned" << eol;
8040 }
8041 }
8042 } else {
8043 }
8044 pmask_qSetBitVal(parent,TradeCondition_Present_GetBit(parent),prs);
8045 }
8046 // MultiLegReportingType type default optional
8047 if (ok) {
8048 bool prs = lib_fast::GetPmapBit(pmap,15);
8049 if (prs) {
8050 prs = !lib_fast::DecodeNull(from);
8051 if (prs) {
8052 ok = lib_fast::DecodeUnsigned(from,parent.MultiLegReportingType.value,true);
8053 if (!ok) {
8054 state.error << "emdi12.MDSshGrp.MultiLegReportingType: bad Unsigned" << eol;
8055 }
8056 }
8057 } else {
8058 }
8059 pmask_qSetBitVal(parent,MultiLegReportingType_Present_GetBit(parent),prs);
8060 }
8061 // MultiLegPriceModel type default optional
8062 if (ok) {
8063 bool prs = lib_fast::GetPmapBit(pmap,16);
8064 if (prs) {
8065 prs = !lib_fast::DecodeNull(from);
8066 if (prs) {
8067 ok = lib_fast::DecodeUnsigned(from,parent.MultiLegPriceModel.value,true);
8068 if (!ok) {
8069 state.error << "emdi12.MDSshGrp.MultiLegPriceModel: bad Unsigned" << eol;
8070 }
8071 }
8072 } else {
8073 }
8074 pmask_qSetBitVal(parent,MultiLegPriceModel_Present_GetBit(parent),prs);
8075 }
8076 // QuoteCondition type copy optional
8077 if (ok) {
8078 bool prs = lib_fast::GetPmapBit(pmap,17);
8079 if (prs) {
8080 prs = !lib_fast::DecodeNull(from);
8081 if (prs) {
8082 ok = lib_fast::DecodeUnsigned(from,parent.QuoteCondition.value,true);
8083 if (!ok) {
8084 state.error << "emdi12.MDSshGrp.QuoteCondition: bad Unsigned" << eol;
8085 }
8086 }
8087 } else if (QuoteCondition_AssignedQ(state)) {
8088 parent.QuoteCondition.value = state.QuoteCondition.value;
8089 prs = QuoteCondition_PresentQ(state);
8090 } else {
8091 prs = false;
8092 }
8093 pmask_qSetBitVal(parent,QuoteCondition_Present_GetBit(parent),prs);
8094 QuoteCondition_SetAssigned(state);
8095 present_qSetBitVal(state,QuoteCondition_Present_GetBit(state),prs);
8096 state.QuoteCondition.value = parent.QuoteCondition.value;
8097 }
8098 // MDEntryPx scaled delta optional
8099 if (ok) {
8100 if (!MDEntryPx_AssignedQ(state)) {
8101 MDEntryPx_SetAssigned(state);
8102 bool prs(true);
8103 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
8104 state.MDEntryPx = algo::Decimal(0,0);
8105 }
8106 bool prs = !lib_fast::DecodeNull(from);
8107 if (prs) {
8108 if (!MDEntryPx_PresentQ(state)) {
8109 state.MDEntryPx = algo::Decimal(0,0);
8110 }
8111 ok = lib_fast::DecodeDeltaScaled(from,state.MDEntryPx,parent.MDEntryPx,true);
8112 if (!ok) {
8113 state.error << "emdi12.MDSshGrp.MDEntryPx: bad Scaled delta" << eol;
8114 }
8115 state.MDEntryPx = parent.MDEntryPx;
8116 }
8117 pmask_qSetBitVal(parent,MDEntryPx_Present_GetBit(parent),prs);
8118 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
8119 }
8120 // MDEntrySize scaled delta optional
8121 if (ok) {
8122 if (!MDEntrySize_AssignedQ(state)) {
8123 MDEntrySize_SetAssigned(state);
8124 bool prs(true);
8125 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
8126 state.MDEntrySize = algo::Decimal(0,0);
8127 }
8128 bool prs = !lib_fast::DecodeNull(from);
8129 if (prs) {
8130 if (!MDEntrySize_PresentQ(state)) {
8131 state.MDEntrySize = algo::Decimal(0,0);
8132 }
8133 ok = lib_fast::DecodeDeltaScaled(from,state.MDEntrySize,parent.MDEntrySize,true);
8134 if (!ok) {
8135 state.error << "emdi12.MDSshGrp.MDEntrySize: bad Scaled delta" << eol;
8136 }
8137 state.MDEntrySize = parent.MDEntrySize;
8138 }
8139 pmask_qSetBitVal(parent,MDEntrySize_Present_GetBit(parent),prs);
8140 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
8141 }
8142 // NumberOfOrders unsigned delta optional
8143 if (ok) {
8144 if (!NumberOfOrders_AssignedQ(state)) {
8145 NumberOfOrders_SetAssigned(state);
8146 bool prs(true);
8147 present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),prs);
8148 state.NumberOfOrders = 0;
8149 }
8150 bool prs = !lib_fast::DecodeNull(from);
8151 if (prs) {
8152 if (!NumberOfOrders_PresentQ(state)) {
8153 state.NumberOfOrders = 0;
8154 }
8155 ok = lib_fast::DecodeDeltaUnsigned(from,state.NumberOfOrders,parent.NumberOfOrders,true);
8156 if (!ok) {
8157 state.error << "emdi12.MDSshGrp.NumberOfOrders: bad Unsigned delta" << eol;
8158 }
8159 state.NumberOfOrders = parent.NumberOfOrders;
8160 }
8161 pmask_qSetBitVal(parent,NumberOfOrders_Present_GetBit(parent),prs);
8162 present_qSetBitVal(state,NumberOfOrders_Present_GetBit(state),prs);
8163 }
8164 // MDPriceLevel unsigned increment optional
8165 if (ok) {
8166 bool prs = lib_fast::GetPmapBit(pmap,18);
8167 if (prs) {
8168 prs = !lib_fast::DecodeNull(from);
8169 if (prs) {
8170 ok = lib_fast::DecodeUnsigned(from,parent.MDPriceLevel,true);
8171 if (!ok) {
8172 state.error << "emdi12.MDSshGrp.MDPriceLevel: bad Unsigned" << eol;
8173 }
8174 }
8175 } else if (MDPriceLevel_AssignedQ(state)) {
8176 parent.MDPriceLevel = state.MDPriceLevel + 1;
8177 prs = MDPriceLevel_PresentQ(state);
8178 } else {
8179 prs = false;
8180 }
8181 pmask_qSetBitVal(parent,MDPriceLevel_Present_GetBit(parent),prs);
8182 MDPriceLevel_SetAssigned(state);
8183 present_qSetBitVal(state,MDPriceLevel_Present_GetBit(state),prs);
8184 state.MDPriceLevel = parent.MDPriceLevel;
8185 }
8186 // MDEntryTime signed delta optional
8187 if (ok) {
8188 if (!MDEntryTime_AssignedQ(state)) {
8189 MDEntryTime_SetAssigned(state);
8190 bool prs(true);
8191 present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),prs);
8192 state.MDEntryTime = 0;
8193 }
8194 bool prs = !lib_fast::DecodeNull(from);
8195 if (prs) {
8196 if (!MDEntryTime_PresentQ(state)) {
8197 state.MDEntryTime = 0;
8198 }
8199 ok = lib_fast::DecodeDeltaSigned(from,state.MDEntryTime,parent.MDEntryTime,true);
8200 if (!ok) {
8201 state.error << "emdi12.MDSshGrp.MDEntryTime: bad Signed delta" << eol;
8202 }
8203 state.MDEntryTime = parent.MDEntryTime;
8204 }
8205 pmask_qSetBitVal(parent,MDEntryTime_Present_GetBit(parent),prs);
8206 present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),prs);
8207 }
8208 // NonDisclosedTradeVolume scaled default optional
8209 if (ok) {
8210 bool prs = lib_fast::GetPmapBit(pmap,19);
8211 if (prs) {
8212 prs = !lib_fast::DecodeNull(from);
8213 if (prs) {
8214 ok = lib_fast::DecodeScaled(from,parent.NonDisclosedTradeVolume,true);
8215 if (!ok) {
8216 state.error << "emdi12.MDSshGrp.NonDisclosedTradeVolume: bad Scaled" << eol;
8217 }
8218 }
8219 } else {
8220 parent.NonDisclosedTradeVolume = algo::Decimal(0,0);
8221 prs = true;
8222 }
8223 pmask_qSetBitVal(parent,NonDisclosedTradeVolume_Present_GetBit(parent),prs);
8224 }
8225 // TotalNumOfTrades unsigned default optional
8226 if (ok) {
8227 bool prs = lib_fast::GetPmapBit(pmap,20);
8228 if (prs) {
8229 prs = !lib_fast::DecodeNull(from);
8230 if (prs) {
8231 ok = lib_fast::DecodeUnsigned(from,parent.TotalNumOfTrades,true);
8232 if (!ok) {
8233 state.error << "emdi12.MDSshGrp.TotalNumOfTrades: bad Unsigned" << eol;
8234 }
8235 }
8236 } else {
8237 }
8238 pmask_qSetBitVal(parent,TotalNumOfTrades_Present_GetBit(parent),prs);
8239 }
8240 return ok;
8241}
8242
8243// --- emdi12.MDSshGrp..FixEncode
8244void emdi12::MDSshGrp_FixEncode(cstring& buf, emdi12::MDSshGrp& parent, char soh) {
8245 buf << "1024=" << parent.MDOriginType << soh;
8246 buf << "269=" << parent.MDEntryType << soh;
8247 if (MDBookType_PresentQ(parent)) {
8248 buf << "1021=" << parent.MDBookType << soh;
8249 }
8250 if (MDSubBookType_PresentQ(parent)) {
8251 buf << "1173=" << parent.MDSubBookType << soh;
8252 }
8253 if (TrdType_PresentQ(parent)) {
8254 buf << "828=" << parent.TrdType << soh;
8255 }
8256 if (TradingSessionID_PresentQ(parent)) {
8257 buf << "336=" << parent.TradingSessionID << soh;
8258 }
8259 if (TradingSessionSubID_PresentQ(parent)) {
8260 buf << "625=" << parent.TradingSessionSubID << soh;
8261 }
8262 if (TESTradSesStatus_PresentQ(parent)) {
8263 buf << "25044=" << parent.TESTradSesStatus << soh;
8264 }
8265 if (SecurityTradingStatus_PresentQ(parent)) {
8266 buf << "326=" << parent.SecurityTradingStatus << soh;
8267 }
8268 if (MarketCondition_PresentQ(parent)) {
8269 buf << "2705=" << parent.MarketCondition << soh;
8270 }
8271 if (FastMarketIndicator_PresentQ(parent)) {
8272 buf << "2447=" << parent.FastMarketIndicator << soh;
8273 }
8274 if (SecurityTradingEvent_PresentQ(parent)) {
8275 buf << "1174=" << parent.SecurityTradingEvent << soh;
8276 }
8277 if (PotentialSecurityTradingEvent_PresentQ(parent)) {
8278 buf << "28872=" << parent.PotentialSecurityTradingEvent << soh;
8279 }
8280 if (SoldOutIndicator_PresentQ(parent)) {
8281 buf << "25155=" << parent.SoldOutIndicator << soh;
8282 }
8283 if (HighPx_PresentQ(parent)) {
8284 buf << "332=" << parent.HighPx << soh;
8285 }
8286 if (LowPx_PresentQ(parent)) {
8287 buf << "333=" << parent.LowPx << soh;
8288 }
8289 if (TradeCondition_PresentQ(parent)) {
8290 buf << "277=" << parent.TradeCondition << soh;
8291 }
8292 if (MultiLegReportingType_PresentQ(parent)) {
8293 buf << "442=" << parent.MultiLegReportingType << soh;
8294 }
8295 if (MultiLegPriceModel_PresentQ(parent)) {
8296 buf << "28750=" << parent.MultiLegPriceModel << soh;
8297 }
8298 if (QuoteCondition_PresentQ(parent)) {
8299 buf << "276=" << parent.QuoteCondition << soh;
8300 }
8301 if (MDEntryPx_PresentQ(parent)) {
8302 buf << "270=" << parent.MDEntryPx << soh;
8303 }
8304 if (MDEntrySize_PresentQ(parent)) {
8305 buf << "271=" << parent.MDEntrySize << soh;
8306 }
8307 if (NumberOfOrders_PresentQ(parent)) {
8308 buf << "346=" << parent.NumberOfOrders << soh;
8309 }
8310 if (MDPriceLevel_PresentQ(parent)) {
8311 buf << "1023=" << parent.MDPriceLevel << soh;
8312 }
8313 if (MDEntryTime_PresentQ(parent)) {
8314 buf << "273=" << parent.MDEntryTime << soh;
8315 }
8316 if (NonDisclosedTradeVolume_PresentQ(parent)) {
8317 buf << "28873=" << parent.NonDisclosedTradeVolume << soh;
8318 }
8319 if (TotalNumOfTrades_PresentQ(parent)) {
8320 buf << "6139=" << parent.TotalNumOfTrades << soh;
8321 }
8322}
8323
8324// --- emdi12.DepthSnapshot.base.CopyOut
8325// Copy fields out of row
8326void emdi12::parent_CopyOut(emdi12::DepthSnapshot &row, emdi12::TemplateHeader &out) {
8327 // length: field value is computed
8328 // id: field value is computed
8329 (void)row;//only to avoid -Wunused-parameter
8330 (void)out;//only to avoid -Wunused-parameter
8331}
8332
8333// --- emdi12.DepthSnapshot.MsgSeqNum.ReadStrptrMaybe
8334inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
8335 bool retval = true;
8336 u32 MsgSeqNum_tmp;
8337 retval = u32_ReadStrptrMaybe(MsgSeqNum_tmp, in_str);
8338 if (retval) {
8339 MsgSeqNum_Set(parent, MsgSeqNum_tmp);
8340 }
8341 return retval;
8342}
8343
8344// --- emdi12.DepthSnapshot.SenderCompID.ReadStrptrMaybe
8345inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
8346 bool retval = true;
8347 retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
8348 return retval;
8349}
8350
8351// --- emdi12.DepthSnapshot.LastMsgSeqNumProcessed.ReadStrptrMaybe
8352inline static bool emdi12::LastMsgSeqNumProcessed_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
8353 bool retval = true;
8354 u32 LastMsgSeqNumProcessed_tmp;
8355 retval = u32_ReadStrptrMaybe(LastMsgSeqNumProcessed_tmp, in_str);
8356 if (retval) {
8357 LastMsgSeqNumProcessed_Set(parent, LastMsgSeqNumProcessed_tmp);
8358 }
8359 return retval;
8360}
8361
8362// --- emdi12.DepthSnapshot.RefreshIndicator.ReadStrptrMaybe
8363inline static bool emdi12::RefreshIndicator_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
8364 bool retval = true;
8365 emdi12::RefreshIndicator RefreshIndicator_tmp;
8366 retval = emdi12::RefreshIndicator_ReadStrptrMaybe(RefreshIndicator_tmp, in_str);
8367 if (retval) {
8368 RefreshIndicator_Set(parent, RefreshIndicator_tmp);
8369 }
8370 return retval;
8371}
8372
8373// --- emdi12.DepthSnapshot.MarketSegmentID.ReadStrptrMaybe
8374inline static bool emdi12::MarketSegmentID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
8375 bool retval = true;
8376 retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, in_str);
8377 return retval;
8378}
8379
8380// --- emdi12.DepthSnapshot.SecurityID.ReadStrptrMaybe
8381inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
8382 bool retval = true;
8383 retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
8384 return retval;
8385}
8386
8387// --- emdi12.DepthSnapshot.ProductComplex.ReadStrptrMaybe
8388inline static bool emdi12::ProductComplex_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
8389 bool retval = true;
8390 retval = emdi12::ProductComplex_ReadStrptrMaybe(parent.ProductComplex, in_str);
8391 return retval;
8392}
8393
8394// --- emdi12.DepthSnapshot.SecurityStatus.ReadStrptrMaybe
8395inline static bool emdi12::SecurityStatus_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
8396 bool retval = true;
8397 retval = emdi12::SecurityStatus_ReadStrptrMaybe(parent.SecurityStatus, in_str);
8398 return retval;
8399}
8400
8401// --- emdi12.DepthSnapshot.TESSecurityStatus.ReadStrptrMaybe
8402inline static bool emdi12::TESSecurityStatus_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
8403 bool retval = true;
8404 emdi12::SecurityStatus TESSecurityStatus_tmp;
8405 retval = emdi12::SecurityStatus_ReadStrptrMaybe(TESSecurityStatus_tmp, in_str);
8406 if (retval) {
8407 TESSecurityStatus_Set(parent, TESSecurityStatus_tmp);
8408 }
8409 return retval;
8410}
8411
8412// --- emdi12.DepthSnapshot.LastUpdateTime.ReadStrptrMaybe
8413inline static bool emdi12::LastUpdateTime_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
8414 bool retval = true;
8415 retval = i64_ReadStrptrMaybe(parent.LastUpdateTime, in_str);
8416 return retval;
8417}
8418
8419// --- emdi12.DepthSnapshot.MDSshGrp.Getary
8420// Access var-length portion as an aryptr. Length is determined from one of the fields.
8421algo::aryptr<emdi12::MDSshGrp> emdi12::MDSshGrp_Getary(emdi12::DepthSnapshot& parent) {
8422 return algo::aryptr<emdi12::MDSshGrp>(MDSshGrp_Addr(parent), MDSshGrp_N(parent));
8423}
8424
8425// --- emdi12.DepthSnapshot.MDSshGrp.Addr
8426emdi12::MDSshGrp* emdi12::MDSshGrp_Addr(emdi12::DepthSnapshot& parent) {
8427 return (emdi12::MDSshGrp*)((u8*)&parent + sizeof(emdi12::DepthSnapshot)); // address of varlen portion
8428}
8429
8430// --- emdi12.DepthSnapshot.MDSshGrp.ReadStrptrMaybe
8431// Convert string to field. Return success value
8432bool emdi12::MDSshGrp_ReadStrptrMaybe(emdi12::DepthSnapshot& parent, algo::strptr in_str) {
8433 bool retval = true;
8434 if (algo_lib::_db.varlenbuf) {
8435 emdi12::MDSshGrp *MDSshGrp_tmp = new(ary_AllocN(*algo_lib::_db.varlenbuf, sizeof(emdi12::MDSshGrp)).elems) emdi12::MDSshGrp;
8436 retval = emdi12::MDSshGrp_ReadStrptrMaybe(*MDSshGrp_tmp, in_str);
8437 }
8438 (void)parent;//only to avoid -Wunused-parameter
8439 return retval;
8440}
8441
8442// --- emdi12.DepthSnapshot.pmask_bitcurs.Next
8443// proceed to next item
8444void emdi12::DepthSnapshot_pmask_bitcurs_Next(DepthSnapshot_pmask_bitcurs &curs) {
8445 ++curs.bit;
8446 int index = curs.bit / 32;
8447 int offset = curs.bit % 32;
8448 for (; index < curs.n_elems; ++index, offset = 0) {
8449 u64 rest = curs.elems[index] >> offset;
8450 if (rest) {
8451 offset += algo::u64_BitScanForward(rest);
8452 break;
8453 }
8454 }
8455 curs.bit = index * 32 + offset;
8456}
8457
8458// --- emdi12.DepthSnapshot..ReadFieldMaybe
8459bool emdi12::DepthSnapshot_ReadFieldMaybe(emdi12::DepthSnapshot& parent, algo::strptr field, algo::strptr strval) {
8460 bool retval = true;
8461 emdi12::FieldId field_id;
8462 (void)value_SetStrptrMaybe(field_id,algo::Pathcomp(field, ".LL"));
8463 switch(field_id) {
8464 case emdi12_FieldId_base: {
8465 retval = false;
8466 break;
8467 }
8468 case emdi12_FieldId_length: {
8469 retval = false;
8470 break;
8471 }
8472 case emdi12_FieldId_id: {
8473 retval = false;
8474 break;
8475 }
8476 case emdi12_FieldId_pmask: {
8477 retval = false;
8478 break;
8479 }
8480 case emdi12_FieldId_MsgType: {
8481 retval = true;
8482 break;
8483 }
8484 case emdi12_FieldId_MsgSeqNum: {
8485 retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
8486 if (retval) {
8487 pmask_qSetBit(parent, 1);
8488 }
8489 break;
8490 }
8491 case emdi12_FieldId_SenderCompID: {
8492 retval = SenderCompID_ReadStrptrMaybe(parent, strval);
8493 break;
8494 }
8495 case emdi12_FieldId_LastMsgSeqNumProcessed: {
8496 retval = LastMsgSeqNumProcessed_ReadStrptrMaybe(parent, strval);
8497 if (retval) {
8498 pmask_qSetBit(parent, 0);
8499 }
8500 break;
8501 }
8502 case emdi12_FieldId_RefreshIndicator: {
8503 retval = RefreshIndicator_ReadStrptrMaybe(parent, strval);
8504 if (retval) {
8505 pmask_qSetBit(parent, 2);
8506 }
8507 break;
8508 }
8509 case emdi12_FieldId_MarketSegmentID: {
8510 retval = MarketSegmentID_ReadStrptrMaybe(parent, strval);
8511 break;
8512 }
8513 case emdi12_FieldId_SecurityID: {
8514 retval = SecurityID_ReadStrptrMaybe(parent, strval);
8515 break;
8516 }
8517 case emdi12_FieldId_SecurityIDSource: {
8518 retval = true;
8519 break;
8520 }
8521 case emdi12_FieldId_ProductComplex: {
8522 retval = ProductComplex_ReadStrptrMaybe(parent, strval);
8523 break;
8524 }
8525 case emdi12_FieldId_SecurityStatus: {
8526 retval = SecurityStatus_ReadStrptrMaybe(parent, strval);
8527 break;
8528 }
8529 case emdi12_FieldId_TESSecurityStatus: {
8530 retval = TESSecurityStatus_ReadStrptrMaybe(parent, strval);
8531 if (retval) {
8532 pmask_qSetBit(parent, 3);
8533 }
8534 break;
8535 }
8536 case emdi12_FieldId_LastUpdateTime: {
8537 retval = LastUpdateTime_ReadStrptrMaybe(parent, strval);
8538 break;
8539 }
8540 case emdi12_FieldId_MDSshGrp: {
8541 retval = MDSshGrp_ReadStrptrMaybe(parent, strval);
8542 break;
8543 }
8544 default: break;
8545 }
8546 if (!retval) {
8547 algo_lib::AppendErrtext("attr",field);
8548 }
8549 return retval;
8550}
8551
8552// --- emdi12.DepthSnapshot..ReadStrptrMaybe
8553// Any varlen fields are returned in algo_lib::_db.varlenbuf if set
8554// Read fields of emdi12::DepthSnapshot from an ascii string.
8555// The format of the string is an ssim Tuple
8556bool emdi12::DepthSnapshot_ReadStrptrMaybe(emdi12::DepthSnapshot &parent, algo::strptr in_str) {
8557 bool retval = true;
8558 retval = algo::StripTypeTag(in_str, "emdi12.DepthSnapshot");
8559 ind_beg(algo::Attr_curs, attr, in_str) {
8560 retval = retval && DepthSnapshot_ReadFieldMaybe(parent, attr.name, attr.value);
8561 }ind_end;
8562 return retval;
8563}
8564
8565// --- emdi12.DepthSnapshot..Init
8566// Set all fields to initial values.
8567void emdi12::DepthSnapshot_Init(emdi12::DepthSnapshot& parent) {
8568 parent.length = u32(ssizeof(parent) + (0));
8569 parent.id = u32(93);
8570 parent.pmask = u32(0);
8571 parent.MsgSeqNum = u32(0);
8572 parent.SenderCompID = u32(0);
8573 parent.LastMsgSeqNumProcessed = u32(0);
8574 parent.MarketSegmentID = u32(0);
8575 parent.SecurityID = i64(0);
8576 parent.SecurityStatus = emdi12_SecurityStatusEnum(0);
8577 parent.LastUpdateTime = i64(0);
8578}
8579
8580// --- emdi12.DepthSnapshot..Print
8581// print string representation of ROW to string STR
8582// cfmt:emdi12.DepthSnapshot.String printfmt:Tuple
8583void emdi12::DepthSnapshot_Print(emdi12::DepthSnapshot& row, algo::cstring& str) {
8584 algo::tempstr temp;
8585 str << "emdi12.DepthSnapshot";
8586
8587 algo::strptr_Print(MsgType_Get(row), temp);
8588 PrintAttrSpaceReset(str,"MsgType", temp);
8589
8590 if (MsgSeqNum_PresentQ(row)) {
8591 u32_Print(row.MsgSeqNum, temp);
8592 PrintAttrSpaceReset(str,"MsgSeqNum", temp);
8593 }
8594
8595 u32_Print(row.SenderCompID, temp);
8596 PrintAttrSpaceReset(str,"SenderCompID", temp);
8597
8598 if (LastMsgSeqNumProcessed_PresentQ(row)) {
8599 u32_Print(row.LastMsgSeqNumProcessed, temp);
8600 PrintAttrSpaceReset(str,"LastMsgSeqNumProcessed", temp);
8601 }
8602
8603 if (RefreshIndicator_PresentQ(row)) {
8604 emdi12::RefreshIndicator_Print(row.RefreshIndicator, temp);
8605 PrintAttrSpaceReset(str,"RefreshIndicator", temp);
8606 }
8607
8608 u32_Print(row.MarketSegmentID, temp);
8609 PrintAttrSpaceReset(str,"MarketSegmentID", temp);
8610
8611 i64_Print(row.SecurityID, temp);
8612 PrintAttrSpaceReset(str,"SecurityID", temp);
8613
8614 algo::strptr_Print(SecurityIDSource_Get(row), temp);
8615 PrintAttrSpaceReset(str,"SecurityIDSource", temp);
8616
8617 emdi12::ProductComplex_Print(row.ProductComplex, temp);
8618 PrintAttrSpaceReset(str,"ProductComplex", temp);
8619
8620 emdi12::SecurityStatus_Print(row.SecurityStatus, temp);
8621 PrintAttrSpaceReset(str,"SecurityStatus", temp);
8622
8623 if (TESSecurityStatus_PresentQ(row)) {
8624 emdi12::SecurityStatus_Print(row.TESSecurityStatus, temp);
8625 PrintAttrSpaceReset(str,"TESSecurityStatus", temp);
8626 }
8627
8628 i64_Print(row.LastUpdateTime, temp);
8629 PrintAttrSpaceReset(str,"LastUpdateTime", temp);
8630
8631 ind_beg(DepthSnapshot_MDSshGrp_curs,MDSshGrp,row) {
8632 emdi12::MDSshGrp_Print(MDSshGrp, temp);
8633 tempstr name;
8634 name << "MDSshGrp.";
8635 name << ind_curs(MDSshGrp).index;
8636 PrintAttrSpaceReset(str, name, temp);
8637 }ind_end;
8638}
8639
8640// --- emdi12.DepthSnapshot..FastEncode
8641void emdi12::DepthSnapshot_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::DepthSnapshot& parent) {
8642 int index = ary_N(buf);
8643 u64 pmap(0);
8644 if (!tid_AssignedQ(state) || parent.id != state.tid) {
8645 lib_fast::EncodeUnsigned(buf,parent.id,false);
8646 lib_fast::SetPmapBit(pmap,0);
8647 }
8648 tid_SetAssigned(state);
8649 state.tid = parent.id;
8650 // MsgType string constant mandatory
8651 // MsgSeqNum unsigned increment optional
8652 if (MsgSeqNum_PresentQ(parent)) {
8653 if (MsgSeqNum_AssignedQ(state)) {
8654 if (!MsgSeqNum_PresentQ(state) || parent.MsgSeqNum != state.MsgSeqNum + 1) {
8655 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,true);
8656 lib_fast::SetPmapBit(pmap,1);
8657 }
8658 } else {
8659 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,true);
8660 lib_fast::SetPmapBit(pmap,1);
8661 }
8662 } else {
8663 if (!MsgSeqNum_AssignedQ(state) || MsgSeqNum_PresentQ(state)) {
8664 lib_fast::EncodeNull(buf);
8665 lib_fast::SetPmapBit(pmap,1);
8666 }
8667 }
8668 state.MsgSeqNum = parent.MsgSeqNum;
8669 present_qSetBitVal(state,MsgSeqNum_Present_GetBit(state),MsgSeqNum_PresentQ(parent));
8670 MsgSeqNum_SetAssigned(state);
8671 // SenderCompID unsigned copy mandatory
8672 if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
8673 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
8674 lib_fast::SetPmapBit(pmap,2);
8675 }
8676 state.SenderCompID = parent.SenderCompID;
8677 SenderCompID_SetAssigned(state);
8678 // LastMsgSeqNumProcessed unsigned increment optional
8679 if (LastMsgSeqNumProcessed_PresentQ(parent)) {
8680 if (LastMsgSeqNumProcessed_AssignedQ(state)) {
8681 if (!LastMsgSeqNumProcessed_PresentQ(state) || parent.LastMsgSeqNumProcessed != state.LastMsgSeqNumProcessed + 1) {
8682 lib_fast::EncodeUnsigned(buf,parent.LastMsgSeqNumProcessed,true);
8683 lib_fast::SetPmapBit(pmap,3);
8684 }
8685 } else {
8686 lib_fast::EncodeUnsigned(buf,parent.LastMsgSeqNumProcessed,true);
8687 lib_fast::SetPmapBit(pmap,3);
8688 }
8689 } else {
8690 if (!LastMsgSeqNumProcessed_AssignedQ(state) || LastMsgSeqNumProcessed_PresentQ(state)) {
8691 lib_fast::EncodeNull(buf);
8692 lib_fast::SetPmapBit(pmap,3);
8693 }
8694 }
8695 state.LastMsgSeqNumProcessed = parent.LastMsgSeqNumProcessed;
8696 present_qSetBitVal(state,LastMsgSeqNumProcessed_Present_GetBit(state),LastMsgSeqNumProcessed_PresentQ(parent));
8697 LastMsgSeqNumProcessed_SetAssigned(state);
8698 // RefreshIndicator type copy optional
8699 if (RefreshIndicator_PresentQ(parent)) {
8700 if (!RefreshIndicator_AssignedQ(state) || !RefreshIndicator_PresentQ(state) || parent.RefreshIndicator.value != state.RefreshIndicator.value ) {
8701 lib_fast::EncodeUnsigned(buf,parent.RefreshIndicator.value,true);
8702 lib_fast::SetPmapBit(pmap,4);
8703 }
8704 } else {
8705 if (RefreshIndicator_AssignedQ(state)) {
8706 lib_fast::EncodeNull(buf);
8707 lib_fast::SetPmapBit(pmap,4);
8708 }
8709 }
8710 state.RefreshIndicator.value = parent.RefreshIndicator.value;
8711 present_qSetBitVal(state,RefreshIndicator_Present_GetBit(state),RefreshIndicator_PresentQ(parent));
8712 RefreshIndicator_SetAssigned(state);
8713 // MarketSegmentID unsigned copy mandatory
8714 if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
8715 lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
8716 lib_fast::SetPmapBit(pmap,5);
8717 }
8718 state.MarketSegmentID = parent.MarketSegmentID;
8719 MarketSegmentID_SetAssigned(state);
8720 // SecurityID signed delta mandatory
8721 if (!SecurityID_AssignedQ(state)) {
8722 SecurityID_SetAssigned(state);
8723 state.SecurityID = 0;
8724 }
8725 lib_fast::EncodeDeltaSigned(buf,state.SecurityID,parent.SecurityID,false);
8726 state.SecurityID = parent.SecurityID;
8727 // SecurityIDSource string constant mandatory
8728 // ProductComplex type copy mandatory
8729 if (!ProductComplex_AssignedQ(state) || parent.ProductComplex.value != state.ProductComplex.value) {
8730 lib_fast::EncodeUnsigned(buf,parent.ProductComplex.value,false);
8731 lib_fast::SetPmapBit(pmap,6);
8732 }
8733 state.ProductComplex.value = parent.ProductComplex.value;
8734 ProductComplex_SetAssigned(state);
8735 // SecurityStatus type default mandatory
8736 if (parent.SecurityStatus.value != 0) {
8737 lib_fast::EncodeUnsigned(buf,parent.SecurityStatus.value,false);
8738 lib_fast::SetPmapBit(pmap,7);
8739 }
8740 // TESSecurityStatus type none optional
8741 if (TESSecurityStatus_PresentQ(parent)) {
8742 lib_fast::EncodeUnsigned(buf,parent.TESSecurityStatus.value,true);
8743 } else {
8744 lib_fast::EncodeNull(buf);
8745 }
8746 // LastUpdateTime signed delta mandatory
8747 if (!LastUpdateTime_AssignedQ(state)) {
8748 LastUpdateTime_SetAssigned(state);
8749 state.LastUpdateTime = 0;
8750 }
8751 lib_fast::EncodeDeltaSigned(buf,state.LastUpdateTime,parent.LastUpdateTime,false);
8752 state.LastUpdateTime = parent.LastUpdateTime;
8753 // MDSshGrp sequence none mandatory
8754 {
8755 u32 length = MDSshGrp_N(parent);
8756 if (length != 1) {
8757 lib_fast::EncodeUnsigned(buf,length,false);
8758 lib_fast::SetPmapBit(pmap,8);
8759 }
8760 ind_beg(DepthSnapshot_MDSshGrp_curs,elem,parent) {
8761 MDSshGrp_FastEncode(buf,state,elem);
8762 }ind_end;
8763 }
8764 lib_fast::InsertPmap(buf,index,pmap);
8765}
8766
8767// --- emdi12.DepthSnapshot..FastDecode
8768bool emdi12::DepthSnapshot_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::DepthSnapshot& parent) {
8769 bool ok = true;
8770 // MsgType string constant mandatory
8771 if (ok) {
8772 }
8773 // MsgSeqNum unsigned increment optional
8774 if (ok) {
8775 bool prs = lib_fast::GetPmapBit(pmap,1);
8776 if (prs) {
8777 prs = !lib_fast::DecodeNull(from);
8778 if (prs) {
8779 ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,true);
8780 if (!ok) {
8781 state.error << "emdi12.DepthSnapshot.MsgSeqNum: bad Unsigned" << eol;
8782 }
8783 }
8784 } else if (MsgSeqNum_AssignedQ(state)) {
8785 parent.MsgSeqNum = state.MsgSeqNum + 1;
8786 prs = MsgSeqNum_PresentQ(state);
8787 } else {
8788 prs = false;
8789 }
8790 pmask_qSetBitVal(parent,MsgSeqNum_Present_GetBit(parent),prs);
8791 MsgSeqNum_SetAssigned(state);
8792 present_qSetBitVal(state,MsgSeqNum_Present_GetBit(state),prs);
8793 state.MsgSeqNum = parent.MsgSeqNum;
8794 }
8795 // SenderCompID unsigned copy mandatory
8796 if (ok) {
8797 bool prs = lib_fast::GetPmapBit(pmap,2);
8798 if (prs) {
8799 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
8800 if (!ok) {
8801 state.error << "emdi12.DepthSnapshot.SenderCompID: bad Unsigned" << eol;
8802 }
8803 } else if (SenderCompID_AssignedQ(state)) {
8804 parent.SenderCompID = state.SenderCompID;
8805 } else {
8806 ok = false;
8807 state.error << "emdi12.DepthSnapshot.SenderCompID: copy operator: previous value unassigned" << eol;
8808 }
8809 SenderCompID_SetAssigned(state);
8810 state.SenderCompID = parent.SenderCompID;
8811 }
8812 // LastMsgSeqNumProcessed unsigned increment optional
8813 if (ok) {
8814 bool prs = lib_fast::GetPmapBit(pmap,3);
8815 if (prs) {
8816 prs = !lib_fast::DecodeNull(from);
8817 if (prs) {
8818 ok = lib_fast::DecodeUnsigned(from,parent.LastMsgSeqNumProcessed,true);
8819 if (!ok) {
8820 state.error << "emdi12.DepthSnapshot.LastMsgSeqNumProcessed: bad Unsigned" << eol;
8821 }
8822 }
8823 } else if (LastMsgSeqNumProcessed_AssignedQ(state)) {
8824 parent.LastMsgSeqNumProcessed = state.LastMsgSeqNumProcessed + 1;
8825 prs = LastMsgSeqNumProcessed_PresentQ(state);
8826 } else {
8827 prs = false;
8828 }
8829 pmask_qSetBitVal(parent,LastMsgSeqNumProcessed_Present_GetBit(parent),prs);
8830 LastMsgSeqNumProcessed_SetAssigned(state);
8831 present_qSetBitVal(state,LastMsgSeqNumProcessed_Present_GetBit(state),prs);
8832 state.LastMsgSeqNumProcessed = parent.LastMsgSeqNumProcessed;
8833 }
8834 // RefreshIndicator type copy optional
8835 if (ok) {
8836 bool prs = lib_fast::GetPmapBit(pmap,4);
8837 if (prs) {
8838 prs = !lib_fast::DecodeNull(from);
8839 if (prs) {
8840 ok = lib_fast::DecodeUnsigned(from,parent.RefreshIndicator.value,true);
8841 if (!ok) {
8842 state.error << "emdi12.DepthSnapshot.RefreshIndicator: bad Unsigned" << eol;
8843 }
8844 }
8845 } else if (RefreshIndicator_AssignedQ(state)) {
8846 parent.RefreshIndicator.value = state.RefreshIndicator.value;
8847 prs = RefreshIndicator_PresentQ(state);
8848 } else {
8849 prs = false;
8850 }
8851 pmask_qSetBitVal(parent,RefreshIndicator_Present_GetBit(parent),prs);
8852 RefreshIndicator_SetAssigned(state);
8853 present_qSetBitVal(state,RefreshIndicator_Present_GetBit(state),prs);
8854 state.RefreshIndicator.value = parent.RefreshIndicator.value;
8855 }
8856 // MarketSegmentID unsigned copy mandatory
8857 if (ok) {
8858 bool prs = lib_fast::GetPmapBit(pmap,5);
8859 if (prs) {
8860 ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
8861 if (!ok) {
8862 state.error << "emdi12.DepthSnapshot.MarketSegmentID: bad Unsigned" << eol;
8863 }
8864 } else if (MarketSegmentID_AssignedQ(state)) {
8865 parent.MarketSegmentID = state.MarketSegmentID;
8866 } else {
8867 ok = false;
8868 state.error << "emdi12.DepthSnapshot.MarketSegmentID: copy operator: previous value unassigned" << eol;
8869 }
8870 MarketSegmentID_SetAssigned(state);
8871 state.MarketSegmentID = parent.MarketSegmentID;
8872 }
8873 // SecurityID signed delta mandatory
8874 if (ok) {
8875 if (!SecurityID_AssignedQ(state)) {
8876 SecurityID_SetAssigned(state);
8877 state.SecurityID = 0;
8878 }
8879 ok = lib_fast::DecodeDeltaSigned(from,state.SecurityID,parent.SecurityID,false);
8880 if (!ok) {
8881 state.error << "emdi12.DepthSnapshot.SecurityID: bad Signed delta" << eol;
8882 }
8883 state.SecurityID = parent.SecurityID;
8884 }
8885 // SecurityIDSource string constant mandatory
8886 if (ok) {
8887 }
8888 // ProductComplex type copy mandatory
8889 if (ok) {
8890 bool prs = lib_fast::GetPmapBit(pmap,6);
8891 if (prs) {
8892 ok = lib_fast::DecodeUnsigned(from,parent.ProductComplex.value,false);
8893 if (!ok) {
8894 state.error << "emdi12.DepthSnapshot.ProductComplex: bad Unsigned" << eol;
8895 }
8896 } else if (ProductComplex_AssignedQ(state)) {
8897 parent.ProductComplex.value = state.ProductComplex.value;
8898 } else {
8899 ok = false;
8900 state.error << "emdi12.DepthSnapshot.ProductComplex: copy operator: previous value unassigned" << eol;
8901 }
8902 ProductComplex_SetAssigned(state);
8903 state.ProductComplex.value = parent.ProductComplex.value;
8904 }
8905 // SecurityStatus type default mandatory
8906 if (ok) {
8907 bool prs = lib_fast::GetPmapBit(pmap,7);
8908 if (prs) {
8909 ok = lib_fast::DecodeUnsigned(from,parent.SecurityStatus.value,false);
8910 if (!ok) {
8911 state.error << "emdi12.DepthSnapshot.SecurityStatus: bad Unsigned" << eol;
8912 }
8913 } else {
8914 parent.SecurityStatus.value = 0;
8915 }
8916 }
8917 // TESSecurityStatus type none optional
8918 if (ok) {
8919 bool prs = !lib_fast::DecodeNull(from);
8920 if (prs) {
8921 ok = lib_fast::DecodeUnsigned(from,parent.TESSecurityStatus.value,true);
8922 if (!ok) {
8923 state.error << "emdi12.DepthSnapshot.TESSecurityStatus: bad Unsigned" << eol;
8924 }
8925 }
8926 pmask_qSetBitVal(parent,TESSecurityStatus_Present_GetBit(parent),prs);
8927 }
8928 // LastUpdateTime signed delta mandatory
8929 if (ok) {
8930 if (!LastUpdateTime_AssignedQ(state)) {
8931 LastUpdateTime_SetAssigned(state);
8932 state.LastUpdateTime = 0;
8933 }
8934 ok = lib_fast::DecodeDeltaSigned(from,state.LastUpdateTime,parent.LastUpdateTime,false);
8935 if (!ok) {
8936 state.error << "emdi12.DepthSnapshot.LastUpdateTime: bad Signed delta" << eol;
8937 }
8938 state.LastUpdateTime = parent.LastUpdateTime;
8939 }
8940 // MDSshGrp sequence none mandatory
8941 if (ok) {
8942 u32 length(0);
8943 bool prs = lib_fast::GetPmapBit(pmap,8);
8944 if (prs) {
8945 ok = lib_fast::DecodeUnsigned(from,length,false);
8946 if (!ok) {
8947 state.error << "emdi12.DepthSnapshot.MDSshGrp: bad Unsigned" << eol;
8948 }
8949 } else {
8950 length = 1;
8951 }
8952 if (!ok) {
8953 state.error << "emdi12.DepthSnapshot.MDSshGrp: bad length" << eol;
8954 }
8955 for (unsigned i=0; ok && i<length; ++i) {
8956 MDSshGrp &seq = *new(ary_AllocN(lib_fast::_db.varlen,sizeof seq).elems) MDSshGrp;
8957 ok = MDSshGrp_FastDecode(from,state,seq);
8958 if (!ok) {
8959 state.error << "emdi12.DepthSnapshot.MDSshGrp: element #"<< i+1 << eol;
8960 }
8961 }
8962 }
8963 return ok;
8964}
8965
8966// --- emdi12.DepthSnapshot..FixEncode
8967void emdi12::DepthSnapshot_FixEncode(cstring& buf, emdi12::DepthSnapshot& parent, char soh) {
8968 buf << "35=" << MsgType_Get(parent) << soh;
8969 if (MsgSeqNum_PresentQ(parent)) {
8970 buf << "34=" << parent.MsgSeqNum << soh;
8971 }
8972 buf << "49=" << parent.SenderCompID << soh;
8973 if (LastMsgSeqNumProcessed_PresentQ(parent)) {
8974 buf << "369=" << parent.LastMsgSeqNumProcessed << soh;
8975 }
8976 if (RefreshIndicator_PresentQ(parent)) {
8977 buf << "1187=" << parent.RefreshIndicator << soh;
8978 }
8979 buf << "1300=" << parent.MarketSegmentID << soh;
8980 buf << "48=" << parent.SecurityID << soh;
8981 buf << "22=" << SecurityIDSource_Get(parent) << soh;
8982 buf << "1227=" << parent.ProductComplex << soh;
8983 buf << "965=" << parent.SecurityStatus << soh;
8984 if (TESSecurityStatus_PresentQ(parent)) {
8985 buf << "25045=" << parent.TESSecurityStatus << soh;
8986 }
8987 buf << "779=" << parent.LastUpdateTime << soh;
8988 {
8989 u32 length = MDSshGrp_N(parent);
8990 if (length) {
8991 buf << "268=" << length << soh;
8992 }
8993 }
8994 ind_beg(DepthSnapshot_MDSshGrp_curs,elem,parent) {
8995 MDSshGrp_FixEncode(buf,elem,soh);
8996 }ind_end;
8997}
8998
8999// --- emdi12.EMDPacketHeader.base.CopyOut
9000// Copy fields out of row
9001void emdi12::parent_CopyOut(emdi12::EMDPacketHeader &row, emdi12::TemplateHeader &out) {
9002 // length: field value is computed
9003 // id: field value is computed
9004 (void)row;//only to avoid -Wunused-parameter
9005 (void)out;//only to avoid -Wunused-parameter
9006}
9007
9008// --- emdi12.EMDPacketHeader..ReadFieldMaybe
9009bool emdi12::EMDPacketHeader_ReadFieldMaybe(emdi12::EMDPacketHeader& parent, algo::strptr field, algo::strptr strval) {
9010 bool retval = true;
9011 emdi12::FieldId field_id;
9012 (void)value_SetStrptrMaybe(field_id,field);
9013 switch(field_id) {
9014 case emdi12_FieldId_base: {
9015 retval = false;
9016 break;
9017 }
9018 case emdi12_FieldId_length: {
9019 retval = false;
9020 break;
9021 }
9022 case emdi12_FieldId_id: {
9023 retval = false;
9024 break;
9025 }
9026 case emdi12_FieldId_PartitionID: {
9027 retval = u32_ReadStrptrMaybe(parent.PartitionID, strval);
9028 break;
9029 }
9030 case emdi12_FieldId_SenderCompID: {
9031 retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
9032 break;
9033 }
9034 case emdi12_FieldId_PacketSeqNum: {
9035 retval = algo::Smallstr30_ReadStrptrMaybe(parent.PacketSeqNum, strval);
9036 break;
9037 }
9038 case emdi12_FieldId_SendingTime: {
9039 retval = algo::Smallstr30_ReadStrptrMaybe(parent.SendingTime, strval);
9040 break;
9041 }
9042 case emdi12_FieldId_PerformanceIndicator: {
9043 retval = algo::Smallstr30_ReadStrptrMaybe(parent.PerformanceIndicator, strval);
9044 break;
9045 }
9046 default: break;
9047 }
9048 if (!retval) {
9049 algo_lib::AppendErrtext("attr",field);
9050 }
9051 return retval;
9052}
9053
9054// --- emdi12.EMDPacketHeader..ReadStrptrMaybe
9055// Read fields of emdi12::EMDPacketHeader from an ascii string.
9056// The format of the string is an ssim Tuple
9057bool emdi12::EMDPacketHeader_ReadStrptrMaybe(emdi12::EMDPacketHeader &parent, algo::strptr in_str) {
9058 bool retval = true;
9059 retval = algo::StripTypeTag(in_str, "emdi12.EMDPacketHeader");
9060 ind_beg(algo::Attr_curs, attr, in_str) {
9061 retval = retval && EMDPacketHeader_ReadFieldMaybe(parent, attr.name, attr.value);
9062 }ind_end;
9063 return retval;
9064}
9065
9066// --- emdi12.EMDPacketHeader..Print
9067// print string representation of ROW to string STR
9068// cfmt:emdi12.EMDPacketHeader.String printfmt:Tuple
9069void emdi12::EMDPacketHeader_Print(emdi12::EMDPacketHeader& row, algo::cstring& str) {
9070 algo::tempstr temp;
9071 str << "emdi12.EMDPacketHeader";
9072
9073 u32_Print(row.PartitionID, temp);
9074 PrintAttrSpaceReset(str,"PartitionID", temp);
9075
9076 u32_Print(row.SenderCompID, temp);
9077 PrintAttrSpaceReset(str,"SenderCompID", temp);
9078
9079 algo::Smallstr30_Print(row.PacketSeqNum, temp);
9080 PrintAttrSpaceReset(str,"PacketSeqNum", temp);
9081
9082 algo::Smallstr30_Print(row.SendingTime, temp);
9083 PrintAttrSpaceReset(str,"SendingTime", temp);
9084
9085 algo::Smallstr30_Print(row.PerformanceIndicator, temp);
9086 PrintAttrSpaceReset(str,"PerformanceIndicator", temp);
9087}
9088
9089// --- emdi12.EMDPacketHeader..FastEncode
9090void emdi12::EMDPacketHeader_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::EMDPacketHeader& parent) {
9091 int index = ary_N(buf);
9092 u64 pmap(0);
9093 if (!tid_AssignedQ(state) || parent.id != state.tid) {
9094 lib_fast::EncodeUnsigned(buf,parent.id,false);
9095 lib_fast::SetPmapBit(pmap,0);
9096 }
9097 tid_SetAssigned(state);
9098 state.tid = parent.id;
9099 // PartitionID unsigned none mandatory
9100 lib_fast::EncodeUnsigned(buf,parent.PartitionID,false);
9101 // SenderCompID unsigned none mandatory
9102 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
9103 // PacketSeqNum byteVector none mandatory
9104 lib_fast::EncodeByteVector(buf,parent.PacketSeqNum,false);
9105 // SendingTime byteVector none mandatory
9106 lib_fast::EncodeByteVector(buf,parent.SendingTime,false);
9107 // PerformanceIndicator byteVector none mandatory
9108 lib_fast::EncodeByteVector(buf,parent.PerformanceIndicator,false);
9109 lib_fast::InsertPmap(buf,index,pmap);
9110}
9111
9112// --- emdi12.EMDPacketHeader..FastDecode
9113bool emdi12::EMDPacketHeader_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::EMDPacketHeader& parent) {
9114 bool ok = true;
9115 // PartitionID unsigned none mandatory
9116 if (ok) {
9117 ok = lib_fast::DecodeUnsigned(from,parent.PartitionID,false);
9118 if (!ok) {
9119 state.error << "emdi12.EMDPacketHeader.PartitionID: bad Unsigned" << eol;
9120 }
9121 }
9122 // SenderCompID unsigned none mandatory
9123 if (ok) {
9124 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
9125 if (!ok) {
9126 state.error << "emdi12.EMDPacketHeader.SenderCompID: bad Unsigned" << eol;
9127 }
9128 }
9129 // PacketSeqNum byteVector none mandatory
9130 if (ok) {
9131 ok = lib_fast::DecodeByteVector(from,parent.PacketSeqNum,false);
9132 if (!ok) {
9133 state.error << "emdi12.EMDPacketHeader.PacketSeqNum: bad ByteVector" << eol;
9134 }
9135 }
9136 // SendingTime byteVector none mandatory
9137 if (ok) {
9138 ok = lib_fast::DecodeByteVector(from,parent.SendingTime,false);
9139 if (!ok) {
9140 state.error << "emdi12.EMDPacketHeader.SendingTime: bad ByteVector" << eol;
9141 }
9142 }
9143 // PerformanceIndicator byteVector none mandatory
9144 if (ok) {
9145 ok = lib_fast::DecodeByteVector(from,parent.PerformanceIndicator,false);
9146 if (!ok) {
9147 state.error << "emdi12.EMDPacketHeader.PerformanceIndicator: bad ByteVector" << eol;
9148 }
9149 }
9150 (void)pmap;//only to avoid -Wunused-parameter
9151 return ok;
9152}
9153
9154// --- emdi12.EMDPacketHeader..FixEncode
9155void emdi12::EMDPacketHeader_FixEncode(cstring& buf, emdi12::EMDPacketHeader& parent, char soh) {
9156 buf << "5948=" << parent.PartitionID << soh;
9157 buf << "49=" << parent.SenderCompID << soh;
9158}
9159
9160// --- emdi12.ExerciseStyle.value.ToCstr
9161// Convert numeric value of field to one of predefined string constants.
9162// If string is found, return a static C string. Otherwise, return NULL.
9163const char* emdi12::value_ToCstr(const emdi12::ExerciseStyle& parent) {
9164 const char *ret = NULL;
9165 switch(value_GetEnum(parent)) {
9166 case emdi12_ExerciseStyle_0 : ret = "0"; break;
9167 case emdi12_ExerciseStyle_1 : ret = "1"; break;
9168 }
9169 return ret;
9170}
9171
9172// --- emdi12.ExerciseStyle.value.Print
9173// Convert value to a string. First, attempt conversion to a known string.
9174// If no string matches, print value as a numeric value.
9175void emdi12::value_Print(const emdi12::ExerciseStyle& parent, algo::cstring &lhs) {
9176 const char *strval = value_ToCstr(parent);
9177 if (strval) {
9178 lhs << strval;
9179 } else {
9180 lhs << parent.value;
9181 }
9182}
9183
9184// --- emdi12.ExerciseStyle.value.SetStrptrMaybe
9185// Convert string to field.
9186// If the string is invalid, do not modify field and return false.
9187// In case of success, return true
9188bool emdi12::value_SetStrptrMaybe(emdi12::ExerciseStyle& parent, algo::strptr rhs) {
9189 bool ret = false;
9190 switch (elems_N(rhs)) {
9191 case 1: {
9192 switch (u64(rhs[0])) {
9193 case '0': {
9194 value_SetEnum(parent,emdi12_ExerciseStyle_0); ret = true; break;
9195 }
9196 case '1': {
9197 value_SetEnum(parent,emdi12_ExerciseStyle_1); ret = true; break;
9198 }
9199 }
9200 break;
9201 }
9202 }
9203 return ret;
9204}
9205
9206// --- emdi12.ExerciseStyle.value.SetStrptr
9207// Convert string to field.
9208// If the string is invalid, set numeric value to DFLT
9209void emdi12::value_SetStrptr(emdi12::ExerciseStyle& parent, algo::strptr rhs, emdi12_ExerciseStyleEnum dflt) {
9210 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
9211}
9212
9213// --- emdi12.ExerciseStyle.value.ReadStrptrMaybe
9214// Convert string to field. Return success value
9215bool emdi12::value_ReadStrptrMaybe(emdi12::ExerciseStyle& parent, algo::strptr rhs) {
9216 bool retval = false;
9217 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
9218 if (!retval) { // didn't work? try reading as underlying type
9219 retval = u32_ReadStrptrMaybe(parent.value,rhs);
9220 }
9221 return retval;
9222}
9223
9224// --- emdi12.ExerciseStyle..ReadStrptrMaybe
9225// Read fields of emdi12::ExerciseStyle from an ascii string.
9226// The format of the string is the format of the emdi12::ExerciseStyle's only field
9227bool emdi12::ExerciseStyle_ReadStrptrMaybe(emdi12::ExerciseStyle &parent, algo::strptr in_str) {
9228 bool retval = true;
9229 retval = retval && value_ReadStrptrMaybe(parent, in_str);
9230 return retval;
9231}
9232
9233// --- emdi12.ExerciseStyle..Print
9234// print string representation of ROW to string STR
9235// cfmt:emdi12.ExerciseStyle.String printfmt:Raw
9236void emdi12::ExerciseStyle_Print(emdi12::ExerciseStyle row, algo::cstring& str) {
9237 emdi12::value_Print(row, str);
9238}
9239
9240// --- emdi12.FastState.assigned_bitcurs.Next
9241// proceed to next item
9242void emdi12::FastState_assigned_bitcurs_Next(FastState_assigned_bitcurs &curs) {
9243 ++curs.bit;
9244 int index = curs.bit / 64;
9245 int offset = curs.bit % 64;
9246 for (; index < curs.n_elems; ++index, offset = 0) {
9247 u64 rest = curs.elems[index] >> offset;
9248 if (rest) {
9249 offset += algo::u64_BitScanForward(rest);
9250 break;
9251 }
9252 }
9253 curs.bit = index * 64 + offset;
9254}
9255
9256// --- emdi12.FastState.present_bitcurs.Next
9257// proceed to next item
9258void emdi12::FastState_present_bitcurs_Next(FastState_present_bitcurs &curs) {
9259 ++curs.bit;
9260 int index = curs.bit / 64;
9261 int offset = curs.bit % 64;
9262 for (; index < curs.n_elems; ++index, offset = 0) {
9263 u64 rest = curs.elems[index] >> offset;
9264 if (rest) {
9265 offset += algo::u64_BitScanForward(rest);
9266 break;
9267 }
9268 }
9269 curs.bit = index * 64 + offset;
9270}
9271
9272// --- emdi12.FastState..Init
9273// Set all fields to initial values.
9274void emdi12::FastState_Init(emdi12::FastState& parent) {
9275 parent.assigned = u64(0);
9276 parent.present = u64(0);
9277 parent.tid = u32(0);
9278 parent.SenderCompID = u32(0);
9279 parent.SenderSubID = u32(0);
9280 parent.MsgSeqNum = u32(0);
9281 parent.MarketSegmentID = u32(0);
9282 parent.TransactTime = i64(0);
9283 parent.SecurityID = i64(0);
9284 parent.NumberOfOrders = u32(0);
9285 parent.MDEntryTime = i64(0);
9286 parent.MDEntryID = u32(0);
9287 parent.LegSymbol = u32(0);
9288 parent.LastMsgSeqNumProcessed = u32(0);
9289 parent.LastUpdateTime = i64(0);
9290 parent.MDPriceLevel = u32(0);
9291 parent.RelatedSecurityID = i64(0);
9292}
9293
9294// --- emdi12.FieldId.value.ToCstr
9295// Convert numeric value of field to one of predefined string constants.
9296// If string is found, return a static C string. Otherwise, return NULL.
9297const char* emdi12::value_ToCstr(const emdi12::FieldId& parent) {
9298 const char *ret = NULL;
9299 switch(value_GetEnum(parent)) {
9300 case emdi12_FieldId_value : ret = "value"; break;
9301 case emdi12_FieldId_base : ret = "base"; break;
9302 case emdi12_FieldId_length : ret = "length"; break;
9303 case emdi12_FieldId_id : ret = "id"; break;
9304 case emdi12_FieldId_MsgType : ret = "MsgType"; break;
9305 case emdi12_FieldId_SenderCompID : ret = "SenderCompID"; break;
9306 case emdi12_FieldId_SenderSubID : ret = "SenderSubID"; break;
9307 case emdi12_FieldId_LastMsgSeqNumProcessed: ret = "LastMsgSeqNumProcessed"; break;
9308 case emdi12_FieldId_pmask : ret = "pmask"; break;
9309 case emdi12_FieldId_MsgSeqNum : ret = "MsgSeqNum"; break;
9310 case emdi12_FieldId_SecurityUpdateAction: ret = "SecurityUpdateAction"; break;
9311 case emdi12_FieldId_SecurityID : ret = "SecurityID"; break;
9312 case emdi12_FieldId_SecurityIDSource: ret = "SecurityIDSource"; break;
9313 case emdi12_FieldId_SecurityDesc : ret = "SecurityDesc"; break;
9314 case emdi12_FieldId_SecurityType : ret = "SecurityType"; break;
9315 case emdi12_FieldId_SecuritySubType: ret = "SecuritySubType"; break;
9316 case emdi12_FieldId_ProductComplex : ret = "ProductComplex"; break;
9317 case emdi12_FieldId_LegRatioMultiplier: ret = "LegRatioMultiplier"; break;
9318 case emdi12_FieldId_QuantityScalingFactor: ret = "QuantityScalingFactor"; break;
9319 case emdi12_FieldId_LastFragment : ret = "LastFragment"; break;
9320 case emdi12_FieldId_MarketSegmentGrp1: ret = "MarketSegmentGrp1"; break;
9321 case emdi12_FieldId_TransactTime : ret = "TransactTime"; break;
9322 case emdi12_FieldId_InstrmtLegGrp : ret = "InstrmtLegGrp"; break;
9323 case emdi12_FieldId_MarketSegmentID: ret = "MarketSegmentID"; break;
9324 case emdi12_FieldId_OrderQty : ret = "OrderQty"; break;
9325 case emdi12_FieldId_CrossRequestType: ret = "CrossRequestType"; break;
9326 case emdi12_FieldId_CrossRequestSideGrp: ret = "CrossRequestSideGrp"; break;
9327 case emdi12_FieldId_MDEntryPx : ret = "MDEntryPx"; break;
9328 case emdi12_FieldId_Side : ret = "Side"; break;
9329 case emdi12_FieldId_InputSource : ret = "InputSource"; break;
9330 case emdi12_FieldId_MDIncGrp1 : ret = "MDIncGrp1"; break;
9331 case emdi12_FieldId_RefreshIndicator: ret = "RefreshIndicator"; break;
9332 case emdi12_FieldId_SecurityStatus : ret = "SecurityStatus"; break;
9333 case emdi12_FieldId_TESSecurityStatus: ret = "TESSecurityStatus"; break;
9334 case emdi12_FieldId_LastUpdateTime : ret = "LastUpdateTime"; break;
9335 case emdi12_FieldId_MDSshGrp : ret = "MDSshGrp"; break;
9336 case emdi12_FieldId_PartitionID : ret = "PartitionID"; break;
9337 case emdi12_FieldId_PacketSeqNum : ret = "PacketSeqNum"; break;
9338 case emdi12_FieldId_SendingTime : ret = "SendingTime"; break;
9339 case emdi12_FieldId_PerformanceIndicator: ret = "PerformanceIndicator"; break;
9340 case emdi12_FieldId_MaturityDate : ret = "MaturityDate"; break;
9341 case emdi12_FieldId_StrikePrice : ret = "StrikePrice"; break;
9342 case emdi12_FieldId_PutOrCall : ret = "PutOrCall"; break;
9343 case emdi12_FieldId_OptAttribute : ret = "OptAttribute"; break;
9344 case emdi12_FieldId_ExerciseStyle : ret = "ExerciseStyle"; break;
9345 case emdi12_FieldId_SettlMethod : ret = "SettlMethod"; break;
9346 case emdi12_FieldId_MarketSegmentGrp2: ret = "MarketSegmentGrp2"; break;
9347 case emdi12_FieldId_LegSymbol : ret = "LegSymbol"; break;
9348 case emdi12_FieldId_LegSecurityID : ret = "LegSecurityID"; break;
9349 case emdi12_FieldId_LegSecurityIDSource: ret = "LegSecurityIDSource"; break;
9350 case emdi12_FieldId_LegSecurityType: ret = "LegSecurityType"; break;
9351 case emdi12_FieldId_LegRatioQty : ret = "LegRatioQty"; break;
9352 case emdi12_FieldId_LegSide : ret = "LegSide"; break;
9353 case emdi12_FieldId_LegPrice : ret = "LegPrice"; break;
9354 case emdi12_FieldId_SecurityTradingStatus: ret = "SecurityTradingStatus"; break;
9355 case emdi12_FieldId_MarketCondition: ret = "MarketCondition"; break;
9356 case emdi12_FieldId_FastMarketIndicator: ret = "FastMarketIndicator"; break;
9357 case emdi12_FieldId_SecurityTradingEvent: ret = "SecurityTradingEvent"; break;
9358 case emdi12_FieldId_SoldOutIndicator: ret = "SoldOutIndicator"; break;
9359 case emdi12_FieldId_HighPx : ret = "HighPx"; break;
9360 case emdi12_FieldId_LowPx : ret = "LowPx"; break;
9361 case emdi12_FieldId_MDOriginType : ret = "MDOriginType"; break;
9362 case emdi12_FieldId_MDUpdateAction : ret = "MDUpdateAction"; break;
9363 case emdi12_FieldId_MDEntryType : ret = "MDEntryType"; break;
9364 case emdi12_FieldId_MDEntrySize : ret = "MDEntrySize"; break;
9365 case emdi12_FieldId_NumberOfOrders : ret = "NumberOfOrders"; break;
9366 case emdi12_FieldId_MDPriceLevel : ret = "MDPriceLevel"; break;
9367 case emdi12_FieldId_MDEntryTime : ret = "MDEntryTime"; break;
9368 case emdi12_FieldId_PotentialSecurityTradingEvent: ret = "PotentialSecurityTradingEvent"; break;
9369 case emdi12_FieldId_QuoteCondition : ret = "QuoteCondition"; break;
9370 case emdi12_FieldId_TradeEntryGrp : ret = "TradeEntryGrp"; break;
9371 case emdi12_FieldId_MDBookType : ret = "MDBookType"; break;
9372 case emdi12_FieldId_MDSubBookType : ret = "MDSubBookType"; break;
9373 case emdi12_FieldId_TrdType : ret = "TrdType"; break;
9374 case emdi12_FieldId_TradingSessionID: ret = "TradingSessionID"; break;
9375 case emdi12_FieldId_TradingSessionSubID: ret = "TradingSessionSubID"; break;
9376 case emdi12_FieldId_TESTradSesStatus: ret = "TESTradSesStatus"; break;
9377 case emdi12_FieldId_TradeCondition : ret = "TradeCondition"; break;
9378 case emdi12_FieldId_MultiLegReportingType: ret = "MultiLegReportingType"; break;
9379 case emdi12_FieldId_MultiLegPriceModel: ret = "MultiLegPriceModel"; break;
9380 case emdi12_FieldId_NonDisclosedTradeVolume: ret = "NonDisclosedTradeVolume"; break;
9381 case emdi12_FieldId_TotalNumOfTrades: ret = "TotalNumOfTrades"; break;
9382 case emdi12_FieldId_ImpliedMarketIndicator: ret = "ImpliedMarketIndicator"; break;
9383 case emdi12_FieldId_InstrumentScopeProductComplex: ret = "InstrumentScopeProductComplex"; break;
9384 case emdi12_FieldId_SecurityMassStatus: ret = "SecurityMassStatus"; break;
9385 case emdi12_FieldId_SecurityMassTradingStatus: ret = "SecurityMassTradingStatus"; break;
9386 case emdi12_FieldId_MassMarketCondition: ret = "MassMarketCondition"; break;
9387 case emdi12_FieldId_SecurityMassTradingEvent: ret = "SecurityMassTradingEvent"; break;
9388 case emdi12_FieldId_MassSoldOutIndicator: ret = "MassSoldOutIndicator"; break;
9389 case emdi12_FieldId_TESSecurityMassStatus: ret = "TESSecurityMassStatus"; break;
9390 case emdi12_FieldId_SecMassStatGrp : ret = "SecMassStatGrp"; break;
9391 case emdi12_FieldId_TradSesStatus : ret = "TradSesStatus"; break;
9392 case emdi12_FieldId_QuotReqGrp : ret = "QuotReqGrp"; break;
9393 case emdi12_FieldId_RelatedSecurityID: ret = "RelatedSecurityID"; break;
9394 case emdi12_FieldId_RelatedSecurityIDSource: ret = "RelatedSecurityIDSource"; break;
9395 case emdi12_FieldId_RelatedInstrumentGrp: ret = "RelatedInstrumentGrp"; break;
9396 case emdi12_FieldId_MarketSegmentGrp3: ret = "MarketSegmentGrp3"; break;
9397 case emdi12_FieldId_MDIncGrp2 : ret = "MDIncGrp2"; break;
9398 case emdi12_FieldId_U : ret = "U"; break;
9399 case emdi12_FieldId_R : ret = "R"; break;
9400 case emdi12_FieldId_AX : ret = "AX"; break;
9401 case emdi12_FieldId_AY : ret = "AY"; break;
9402 case emdi12_FieldId_AJ : ret = "AJ"; break;
9403 case emdi12_FieldId_AW : ret = "AW"; break;
9404 case emdi12_FieldId_k : ret = "k"; break;
9405 case emdi12_FieldId_BD : ret = "BD"; break;
9406 case emdi12_FieldId_a : ret = "a"; break;
9407 case emdi12_FieldId_BC : ret = "BC"; break;
9408 case emdi12_FieldId_SA : ret = "SA"; break;
9409 case emdi12_FieldId_TC : ret = "TC"; break;
9410 case emdi12_FieldId_XR : ret = "XR"; break;
9411 case emdi12_FieldId_AlgorithmicTradeIndicator: ret = "AlgorithmicTradeIndicator"; break;
9412 case emdi12_FieldId_AggressorTime : ret = "AggressorTime"; break;
9413 case emdi12_FieldId_RequestTime : ret = "RequestTime"; break;
9414 case emdi12_FieldId_AggressorSide : ret = "AggressorSide"; break;
9415 case emdi12_FieldId_NumberOfBuyOrders: ret = "NumberOfBuyOrders"; break;
9416 case emdi12_FieldId_NumberOfSellOrders: ret = "NumberOfSellOrders"; break;
9417 case emdi12_FieldId_RestingCxlQty : ret = "RestingCxlQty"; break;
9418 case emdi12_FieldId_MDEntryID : ret = "MDEntryID"; break;
9419 }
9420 return ret;
9421}
9422
9423// --- emdi12.FieldId.value.Print
9424// Convert value to a string. First, attempt conversion to a known string.
9425// If no string matches, print value as a numeric value.
9426void emdi12::value_Print(const emdi12::FieldId& parent, algo::cstring &lhs) {
9427 const char *strval = value_ToCstr(parent);
9428 if (strval) {
9429 lhs << strval;
9430 } else {
9431 lhs << parent.value;
9432 }
9433}
9434
9435// --- emdi12.FieldId.value.SetStrptrMaybe
9436// Convert string to field.
9437// If the string is invalid, do not modify field and return false.
9438// In case of success, return true
9439bool emdi12::value_SetStrptrMaybe(emdi12::FieldId& parent, algo::strptr rhs) {
9440 bool ret = false;
9441 switch (elems_N(rhs)) {
9442 case 1: {
9443 switch (u64(rhs[0])) {
9444 case 'R': {
9445 value_SetEnum(parent,emdi12_FieldId_R); ret = true; break;
9446 }
9447 case 'U': {
9448 value_SetEnum(parent,emdi12_FieldId_U); ret = true; break;
9449 }
9450 case 'a': {
9451 value_SetEnum(parent,emdi12_FieldId_a); ret = true; break;
9452 }
9453 case 'k': {
9454 value_SetEnum(parent,emdi12_FieldId_k); ret = true; break;
9455 }
9456 }
9457 break;
9458 }
9459 case 2: {
9460 switch (u64(algo::ReadLE16(rhs.elems))) {
9461 case LE_STR2('A','J'): {
9462 value_SetEnum(parent,emdi12_FieldId_AJ); ret = true; break;
9463 }
9464 case LE_STR2('A','W'): {
9465 value_SetEnum(parent,emdi12_FieldId_AW); ret = true; break;
9466 }
9467 case LE_STR2('A','X'): {
9468 value_SetEnum(parent,emdi12_FieldId_AX); ret = true; break;
9469 }
9470 case LE_STR2('A','Y'): {
9471 value_SetEnum(parent,emdi12_FieldId_AY); ret = true; break;
9472 }
9473 case LE_STR2('B','C'): {
9474 value_SetEnum(parent,emdi12_FieldId_BC); ret = true; break;
9475 }
9476 case LE_STR2('B','D'): {
9477 value_SetEnum(parent,emdi12_FieldId_BD); ret = true; break;
9478 }
9479 case LE_STR2('S','A'): {
9480 value_SetEnum(parent,emdi12_FieldId_SA); ret = true; break;
9481 }
9482 case LE_STR2('T','C'): {
9483 value_SetEnum(parent,emdi12_FieldId_TC); ret = true; break;
9484 }
9485 case LE_STR2('X','R'): {
9486 value_SetEnum(parent,emdi12_FieldId_XR); ret = true; break;
9487 }
9488 case LE_STR2('i','d'): {
9489 value_SetEnum(parent,emdi12_FieldId_id); ret = true; break;
9490 }
9491 }
9492 break;
9493 }
9494 case 4: {
9495 switch (u64(algo::ReadLE32(rhs.elems))) {
9496 case LE_STR4('S','i','d','e'): {
9497 value_SetEnum(parent,emdi12_FieldId_Side); ret = true; break;
9498 }
9499 case LE_STR4('b','a','s','e'): {
9500 value_SetEnum(parent,emdi12_FieldId_base); ret = true; break;
9501 }
9502 }
9503 break;
9504 }
9505 case 5: {
9506 switch (u64(algo::ReadLE32(rhs.elems))|(u64(rhs[4])<<32)) {
9507 case LE_STR5('L','o','w','P','x'): {
9508 value_SetEnum(parent,emdi12_FieldId_LowPx); ret = true; break;
9509 }
9510 case LE_STR5('p','m','a','s','k'): {
9511 value_SetEnum(parent,emdi12_FieldId_pmask); ret = true; break;
9512 }
9513 case LE_STR5('v','a','l','u','e'): {
9514 value_SetEnum(parent,emdi12_FieldId_value); ret = true; break;
9515 }
9516 }
9517 break;
9518 }
9519 case 6: {
9520 switch (u64(algo::ReadLE32(rhs.elems))|(u64(algo::ReadLE16(rhs.elems+4))<<32)) {
9521 case LE_STR6('H','i','g','h','P','x'): {
9522 value_SetEnum(parent,emdi12_FieldId_HighPx); ret = true; break;
9523 }
9524 case LE_STR6('l','e','n','g','t','h'): {
9525 value_SetEnum(parent,emdi12_FieldId_length); ret = true; break;
9526 }
9527 }
9528 break;
9529 }
9530 case 7: {
9531 switch (u64(algo::ReadLE32(rhs.elems))|(u64(algo::ReadLE16(rhs.elems+4))<<32)|(u64(rhs[6])<<48)) {
9532 case LE_STR7('L','e','g','S','i','d','e'): {
9533 value_SetEnum(parent,emdi12_FieldId_LegSide); ret = true; break;
9534 }
9535 case LE_STR7('M','s','g','T','y','p','e'): {
9536 value_SetEnum(parent,emdi12_FieldId_MsgType); ret = true; break;
9537 }
9538 case LE_STR7('T','r','d','T','y','p','e'): {
9539 value_SetEnum(parent,emdi12_FieldId_TrdType); ret = true; break;
9540 }
9541 }
9542 break;
9543 }
9544 case 8: {
9545 switch (algo::ReadLE64(rhs.elems)) {
9546 case LE_STR8('L','e','g','P','r','i','c','e'): {
9547 value_SetEnum(parent,emdi12_FieldId_LegPrice); ret = true; break;
9548 }
9549 case LE_STR8('M','D','S','s','h','G','r','p'): {
9550 value_SetEnum(parent,emdi12_FieldId_MDSshGrp); ret = true; break;
9551 }
9552 case LE_STR8('O','r','d','e','r','Q','t','y'): {
9553 value_SetEnum(parent,emdi12_FieldId_OrderQty); ret = true; break;
9554 }
9555 }
9556 break;
9557 }
9558 case 9: {
9559 switch (algo::ReadLE64(rhs.elems)) {
9560 case LE_STR8('L','e','g','S','y','m','b','o'): {
9561 if (memcmp(rhs.elems+8,"l",1)==0) { value_SetEnum(parent,emdi12_FieldId_LegSymbol); ret = true; break; }
9562 break;
9563 }
9564 case LE_STR8('M','D','E','n','t','r','y','I'): {
9565 if (memcmp(rhs.elems+8,"D",1)==0) { value_SetEnum(parent,emdi12_FieldId_MDEntryID); ret = true; break; }
9566 break;
9567 }
9568 case LE_STR8('M','D','E','n','t','r','y','P'): {
9569 if (memcmp(rhs.elems+8,"x",1)==0) { value_SetEnum(parent,emdi12_FieldId_MDEntryPx); ret = true; break; }
9570 break;
9571 }
9572 case LE_STR8('M','D','I','n','c','G','r','p'): {
9573 if (memcmp(rhs.elems+8,"1",1)==0) { value_SetEnum(parent,emdi12_FieldId_MDIncGrp1); ret = true; break; }
9574 if (memcmp(rhs.elems+8,"2",1)==0) { value_SetEnum(parent,emdi12_FieldId_MDIncGrp2); ret = true; break; }
9575 break;
9576 }
9577 case LE_STR8('M','s','g','S','e','q','N','u'): {
9578 if (memcmp(rhs.elems+8,"m",1)==0) { value_SetEnum(parent,emdi12_FieldId_MsgSeqNum); ret = true; break; }
9579 break;
9580 }
9581 case LE_STR8('P','u','t','O','r','C','a','l'): {
9582 if (memcmp(rhs.elems+8,"l",1)==0) { value_SetEnum(parent,emdi12_FieldId_PutOrCall); ret = true; break; }
9583 break;
9584 }
9585 }
9586 break;
9587 }
9588 case 10: {
9589 switch (algo::ReadLE64(rhs.elems)) {
9590 case LE_STR8('M','D','B','o','o','k','T','y'): {
9591 if (memcmp(rhs.elems+8,"pe",2)==0) { value_SetEnum(parent,emdi12_FieldId_MDBookType); ret = true; break; }
9592 break;
9593 }
9594 case LE_STR8('Q','u','o','t','R','e','q','G'): {
9595 if (memcmp(rhs.elems+8,"rp",2)==0) { value_SetEnum(parent,emdi12_FieldId_QuotReqGrp); ret = true; break; }
9596 break;
9597 }
9598 case LE_STR8('S','e','c','u','r','i','t','y'): {
9599 if (memcmp(rhs.elems+8,"ID",2)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityID); ret = true; break; }
9600 break;
9601 }
9602 }
9603 break;
9604 }
9605 case 11: {
9606 switch (algo::ReadLE64(rhs.elems)) {
9607 case LE_STR8('I','n','p','u','t','S','o','u'): {
9608 if (memcmp(rhs.elems+8,"rce",3)==0) { value_SetEnum(parent,emdi12_FieldId_InputSource); ret = true; break; }
9609 break;
9610 }
9611 case LE_STR8('L','e','g','R','a','t','i','o'): {
9612 if (memcmp(rhs.elems+8,"Qty",3)==0) { value_SetEnum(parent,emdi12_FieldId_LegRatioQty); ret = true; break; }
9613 break;
9614 }
9615 case LE_STR8('M','D','E','n','t','r','y','S'): {
9616 if (memcmp(rhs.elems+8,"ize",3)==0) { value_SetEnum(parent,emdi12_FieldId_MDEntrySize); ret = true; break; }
9617 break;
9618 }
9619 case LE_STR8('M','D','E','n','t','r','y','T'): {
9620 if (memcmp(rhs.elems+8,"ype",3)==0) { value_SetEnum(parent,emdi12_FieldId_MDEntryType); ret = true; break; }
9621 if (memcmp(rhs.elems+8,"ime",3)==0) { value_SetEnum(parent,emdi12_FieldId_MDEntryTime); ret = true; break; }
9622 break;
9623 }
9624 case LE_STR8('P','a','r','t','i','t','i','o'): {
9625 if (memcmp(rhs.elems+8,"nID",3)==0) { value_SetEnum(parent,emdi12_FieldId_PartitionID); ret = true; break; }
9626 break;
9627 }
9628 case LE_STR8('R','e','q','u','e','s','t','T'): {
9629 if (memcmp(rhs.elems+8,"ime",3)==0) { value_SetEnum(parent,emdi12_FieldId_RequestTime); ret = true; break; }
9630 break;
9631 }
9632 case LE_STR8('S','e','n','d','e','r','S','u'): {
9633 if (memcmp(rhs.elems+8,"bID",3)==0) { value_SetEnum(parent,emdi12_FieldId_SenderSubID); ret = true; break; }
9634 break;
9635 }
9636 case LE_STR8('S','e','n','d','i','n','g','T'): {
9637 if (memcmp(rhs.elems+8,"ime",3)==0) { value_SetEnum(parent,emdi12_FieldId_SendingTime); ret = true; break; }
9638 break;
9639 }
9640 case LE_STR8('S','e','t','t','l','M','e','t'): {
9641 if (memcmp(rhs.elems+8,"hod",3)==0) { value_SetEnum(parent,emdi12_FieldId_SettlMethod); ret = true; break; }
9642 break;
9643 }
9644 case LE_STR8('S','t','r','i','k','e','P','r'): {
9645 if (memcmp(rhs.elems+8,"ice",3)==0) { value_SetEnum(parent,emdi12_FieldId_StrikePrice); ret = true; break; }
9646 break;
9647 }
9648 }
9649 break;
9650 }
9651 case 12: {
9652 switch (algo::ReadLE64(rhs.elems)) {
9653 case LE_STR8('L','a','s','t','F','r','a','g'): {
9654 if (memcmp(rhs.elems+8,"ment",4)==0) { value_SetEnum(parent,emdi12_FieldId_LastFragment); ret = true; break; }
9655 break;
9656 }
9657 case LE_STR8('M','D','O','r','i','g','i','n'): {
9658 if (memcmp(rhs.elems+8,"Type",4)==0) { value_SetEnum(parent,emdi12_FieldId_MDOriginType); ret = true; break; }
9659 break;
9660 }
9661 case LE_STR8('M','D','P','r','i','c','e','L'): {
9662 if (memcmp(rhs.elems+8,"evel",4)==0) { value_SetEnum(parent,emdi12_FieldId_MDPriceLevel); ret = true; break; }
9663 break;
9664 }
9665 case LE_STR8('M','a','t','u','r','i','t','y'): {
9666 if (memcmp(rhs.elems+8,"Date",4)==0) { value_SetEnum(parent,emdi12_FieldId_MaturityDate); ret = true; break; }
9667 break;
9668 }
9669 case LE_STR8('O','p','t','A','t','t','r','i'): {
9670 if (memcmp(rhs.elems+8,"bute",4)==0) { value_SetEnum(parent,emdi12_FieldId_OptAttribute); ret = true; break; }
9671 break;
9672 }
9673 case LE_STR8('P','a','c','k','e','t','S','e'): {
9674 if (memcmp(rhs.elems+8,"qNum",4)==0) { value_SetEnum(parent,emdi12_FieldId_PacketSeqNum); ret = true; break; }
9675 break;
9676 }
9677 case LE_STR8('S','e','c','u','r','i','t','y'): {
9678 if (memcmp(rhs.elems+8,"Desc",4)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityDesc); ret = true; break; }
9679 if (memcmp(rhs.elems+8,"Type",4)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityType); ret = true; break; }
9680 break;
9681 }
9682 case LE_STR8('S','e','n','d','e','r','C','o'): {
9683 if (memcmp(rhs.elems+8,"mpID",4)==0) { value_SetEnum(parent,emdi12_FieldId_SenderCompID); ret = true; break; }
9684 break;
9685 }
9686 case LE_STR8('T','r','a','n','s','a','c','t'): {
9687 if (memcmp(rhs.elems+8,"Time",4)==0) { value_SetEnum(parent,emdi12_FieldId_TransactTime); ret = true; break; }
9688 break;
9689 }
9690 }
9691 break;
9692 }
9693 case 13: {
9694 switch (algo::ReadLE64(rhs.elems)) {
9695 case LE_STR8('A','g','g','r','e','s','s','o'): {
9696 if (memcmp(rhs.elems+8,"rTime",5)==0) { value_SetEnum(parent,emdi12_FieldId_AggressorTime); ret = true; break; }
9697 if (memcmp(rhs.elems+8,"rSide",5)==0) { value_SetEnum(parent,emdi12_FieldId_AggressorSide); ret = true; break; }
9698 break;
9699 }
9700 case LE_STR8('E','x','e','r','c','i','s','e'): {
9701 if (memcmp(rhs.elems+8,"Style",5)==0) { value_SetEnum(parent,emdi12_FieldId_ExerciseStyle); ret = true; break; }
9702 break;
9703 }
9704 case LE_STR8('I','n','s','t','r','m','t','L'): {
9705 if (memcmp(rhs.elems+8,"egGrp",5)==0) { value_SetEnum(parent,emdi12_FieldId_InstrmtLegGrp); ret = true; break; }
9706 break;
9707 }
9708 case LE_STR8('L','e','g','S','e','c','u','r'): {
9709 if (memcmp(rhs.elems+8,"ityID",5)==0) { value_SetEnum(parent,emdi12_FieldId_LegSecurityID); ret = true; break; }
9710 break;
9711 }
9712 case LE_STR8('M','D','S','u','b','B','o','o'): {
9713 if (memcmp(rhs.elems+8,"kType",5)==0) { value_SetEnum(parent,emdi12_FieldId_MDSubBookType); ret = true; break; }
9714 break;
9715 }
9716 case LE_STR8('R','e','s','t','i','n','g','C'): {
9717 if (memcmp(rhs.elems+8,"xlQty",5)==0) { value_SetEnum(parent,emdi12_FieldId_RestingCxlQty); ret = true; break; }
9718 break;
9719 }
9720 case LE_STR8('T','r','a','d','S','e','s','S'): {
9721 if (memcmp(rhs.elems+8,"tatus",5)==0) { value_SetEnum(parent,emdi12_FieldId_TradSesStatus); ret = true; break; }
9722 break;
9723 }
9724 case LE_STR8('T','r','a','d','e','E','n','t'): {
9725 if (memcmp(rhs.elems+8,"ryGrp",5)==0) { value_SetEnum(parent,emdi12_FieldId_TradeEntryGrp); ret = true; break; }
9726 break;
9727 }
9728 }
9729 break;
9730 }
9731 case 14: {
9732 switch (algo::ReadLE64(rhs.elems)) {
9733 case LE_STR8('L','a','s','t','U','p','d','a'): {
9734 if (memcmp(rhs.elems+8,"teTime",6)==0) { value_SetEnum(parent,emdi12_FieldId_LastUpdateTime); ret = true; break; }
9735 break;
9736 }
9737 case LE_STR8('M','D','U','p','d','a','t','e'): {
9738 if (memcmp(rhs.elems+8,"Action",6)==0) { value_SetEnum(parent,emdi12_FieldId_MDUpdateAction); ret = true; break; }
9739 break;
9740 }
9741 case LE_STR8('N','u','m','b','e','r','O','f'): {
9742 if (memcmp(rhs.elems+8,"Orders",6)==0) { value_SetEnum(parent,emdi12_FieldId_NumberOfOrders); ret = true; break; }
9743 break;
9744 }
9745 case LE_STR8('P','r','o','d','u','c','t','C'): {
9746 if (memcmp(rhs.elems+8,"omplex",6)==0) { value_SetEnum(parent,emdi12_FieldId_ProductComplex); ret = true; break; }
9747 break;
9748 }
9749 case LE_STR8('Q','u','o','t','e','C','o','n'): {
9750 if (memcmp(rhs.elems+8,"dition",6)==0) { value_SetEnum(parent,emdi12_FieldId_QuoteCondition); ret = true; break; }
9751 break;
9752 }
9753 case LE_STR8('S','e','c','M','a','s','s','S'): {
9754 if (memcmp(rhs.elems+8,"tatGrp",6)==0) { value_SetEnum(parent,emdi12_FieldId_SecMassStatGrp); ret = true; break; }
9755 break;
9756 }
9757 case LE_STR8('S','e','c','u','r','i','t','y'): {
9758 if (memcmp(rhs.elems+8,"Status",6)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityStatus); ret = true; break; }
9759 break;
9760 }
9761 case LE_STR8('T','r','a','d','e','C','o','n'): {
9762 if (memcmp(rhs.elems+8,"dition",6)==0) { value_SetEnum(parent,emdi12_FieldId_TradeCondition); ret = true; break; }
9763 break;
9764 }
9765 }
9766 break;
9767 }
9768 case 15: {
9769 switch (algo::ReadLE64(rhs.elems)) {
9770 case LE_STR8('L','e','g','S','e','c','u','r'): {
9771 if (memcmp(rhs.elems+8,"ityType",7)==0) { value_SetEnum(parent,emdi12_FieldId_LegSecurityType); ret = true; break; }
9772 break;
9773 }
9774 case LE_STR8('M','a','r','k','e','t','C','o'): {
9775 if (memcmp(rhs.elems+8,"ndition",7)==0) { value_SetEnum(parent,emdi12_FieldId_MarketCondition); ret = true; break; }
9776 break;
9777 }
9778 case LE_STR8('M','a','r','k','e','t','S','e'): {
9779 if (memcmp(rhs.elems+8,"gmentID",7)==0) { value_SetEnum(parent,emdi12_FieldId_MarketSegmentID); ret = true; break; }
9780 break;
9781 }
9782 case LE_STR8('S','e','c','u','r','i','t','y'): {
9783 if (memcmp(rhs.elems+8,"SubType",7)==0) { value_SetEnum(parent,emdi12_FieldId_SecuritySubType); ret = true; break; }
9784 break;
9785 }
9786 }
9787 break;
9788 }
9789 case 16: {
9790 switch (algo::ReadLE64(rhs.elems)) {
9791 case LE_STR8('C','r','o','s','s','R','e','q'): {
9792 if (memcmp(rhs.elems+8,"uestType",8)==0) { value_SetEnum(parent,emdi12_FieldId_CrossRequestType); ret = true; break; }
9793 break;
9794 }
9795 case LE_STR8('R','e','f','r','e','s','h','I'): {
9796 if (memcmp(rhs.elems+8,"ndicator",8)==0) { value_SetEnum(parent,emdi12_FieldId_RefreshIndicator); ret = true; break; }
9797 break;
9798 }
9799 case LE_STR8('S','e','c','u','r','i','t','y'): {
9800 if (memcmp(rhs.elems+8,"IDSource",8)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityIDSource); ret = true; break; }
9801 break;
9802 }
9803 case LE_STR8('S','o','l','d','O','u','t','I'): {
9804 if (memcmp(rhs.elems+8,"ndicator",8)==0) { value_SetEnum(parent,emdi12_FieldId_SoldOutIndicator); ret = true; break; }
9805 break;
9806 }
9807 case LE_STR8('T','E','S','T','r','a','d','S'): {
9808 if (memcmp(rhs.elems+8,"esStatus",8)==0) { value_SetEnum(parent,emdi12_FieldId_TESTradSesStatus); ret = true; break; }
9809 break;
9810 }
9811 case LE_STR8('T','o','t','a','l','N','u','m'): {
9812 if (memcmp(rhs.elems+8,"OfTrades",8)==0) { value_SetEnum(parent,emdi12_FieldId_TotalNumOfTrades); ret = true; break; }
9813 break;
9814 }
9815 case LE_STR8('T','r','a','d','i','n','g','S'): {
9816 if (memcmp(rhs.elems+8,"essionID",8)==0) { value_SetEnum(parent,emdi12_FieldId_TradingSessionID); ret = true; break; }
9817 break;
9818 }
9819 }
9820 break;
9821 }
9822 case 17: {
9823 switch (algo::ReadLE64(rhs.elems)) {
9824 case LE_STR8('M','a','r','k','e','t','S','e'): {
9825 if (memcmp(rhs.elems+8,"gmentGrp1",9)==0) { value_SetEnum(parent,emdi12_FieldId_MarketSegmentGrp1); ret = true; break; }
9826 if (memcmp(rhs.elems+8,"gmentGrp2",9)==0) { value_SetEnum(parent,emdi12_FieldId_MarketSegmentGrp2); ret = true; break; }
9827 if (memcmp(rhs.elems+8,"gmentGrp3",9)==0) { value_SetEnum(parent,emdi12_FieldId_MarketSegmentGrp3); ret = true; break; }
9828 break;
9829 }
9830 case LE_STR8('N','u','m','b','e','r','O','f'): {
9831 if (memcmp(rhs.elems+8,"BuyOrders",9)==0) { value_SetEnum(parent,emdi12_FieldId_NumberOfBuyOrders); ret = true; break; }
9832 break;
9833 }
9834 case LE_STR8('R','e','l','a','t','e','d','S'): {
9835 if (memcmp(rhs.elems+8,"ecurityID",9)==0) { value_SetEnum(parent,emdi12_FieldId_RelatedSecurityID); ret = true; break; }
9836 break;
9837 }
9838 case LE_STR8('T','E','S','S','e','c','u','r'): {
9839 if (memcmp(rhs.elems+8,"ityStatus",9)==0) { value_SetEnum(parent,emdi12_FieldId_TESSecurityStatus); ret = true; break; }
9840 break;
9841 }
9842 }
9843 break;
9844 }
9845 case 18: {
9846 switch (algo::ReadLE64(rhs.elems)) {
9847 case LE_STR8('L','e','g','R','a','t','i','o'): {
9848 if (memcmp(rhs.elems+8,"Multiplier",10)==0) { value_SetEnum(parent,emdi12_FieldId_LegRatioMultiplier); ret = true; break; }
9849 break;
9850 }
9851 case LE_STR8('M','u','l','t','i','L','e','g'): {
9852 if (memcmp(rhs.elems+8,"PriceModel",10)==0) { value_SetEnum(parent,emdi12_FieldId_MultiLegPriceModel); ret = true; break; }
9853 break;
9854 }
9855 case LE_STR8('N','u','m','b','e','r','O','f'): {
9856 if (memcmp(rhs.elems+8,"SellOrders",10)==0) { value_SetEnum(parent,emdi12_FieldId_NumberOfSellOrders); ret = true; break; }
9857 break;
9858 }
9859 case LE_STR8('S','e','c','u','r','i','t','y'): {
9860 if (memcmp(rhs.elems+8,"MassStatus",10)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityMassStatus); ret = true; break; }
9861 break;
9862 }
9863 }
9864 break;
9865 }
9866 case 19: {
9867 switch (algo::ReadLE64(rhs.elems)) {
9868 case LE_STR8('C','r','o','s','s','R','e','q'): {
9869 if (memcmp(rhs.elems+8,"uestSideGrp",11)==0) { value_SetEnum(parent,emdi12_FieldId_CrossRequestSideGrp); ret = true; break; }
9870 break;
9871 }
9872 case LE_STR8('F','a','s','t','M','a','r','k'): {
9873 if (memcmp(rhs.elems+8,"etIndicator",11)==0) { value_SetEnum(parent,emdi12_FieldId_FastMarketIndicator); ret = true; break; }
9874 break;
9875 }
9876 case LE_STR8('L','e','g','S','e','c','u','r'): {
9877 if (memcmp(rhs.elems+8,"ityIDSource",11)==0) { value_SetEnum(parent,emdi12_FieldId_LegSecurityIDSource); ret = true; break; }
9878 break;
9879 }
9880 case LE_STR8('M','a','s','s','M','a','r','k'): {
9881 if (memcmp(rhs.elems+8,"etCondition",11)==0) { value_SetEnum(parent,emdi12_FieldId_MassMarketCondition); ret = true; break; }
9882 break;
9883 }
9884 case LE_STR8('T','r','a','d','i','n','g','S'): {
9885 if (memcmp(rhs.elems+8,"essionSubID",11)==0) { value_SetEnum(parent,emdi12_FieldId_TradingSessionSubID); ret = true; break; }
9886 break;
9887 }
9888 }
9889 break;
9890 }
9891 case 20: {
9892 switch (algo::ReadLE64(rhs.elems)) {
9893 case LE_STR8('M','a','s','s','S','o','l','d'): {
9894 if (memcmp(rhs.elems+8,"OutIndicator",12)==0) { value_SetEnum(parent,emdi12_FieldId_MassSoldOutIndicator); ret = true; break; }
9895 break;
9896 }
9897 case LE_STR8('P','e','r','f','o','r','m','a'): {
9898 if (memcmp(rhs.elems+8,"nceIndicator",12)==0) { value_SetEnum(parent,emdi12_FieldId_PerformanceIndicator); ret = true; break; }
9899 break;
9900 }
9901 case LE_STR8('R','e','l','a','t','e','d','I'): {
9902 if (memcmp(rhs.elems+8,"nstrumentGrp",12)==0) { value_SetEnum(parent,emdi12_FieldId_RelatedInstrumentGrp); ret = true; break; }
9903 break;
9904 }
9905 case LE_STR8('S','e','c','u','r','i','t','y'): {
9906 if (memcmp(rhs.elems+8,"UpdateAction",12)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityUpdateAction); ret = true; break; }
9907 if (memcmp(rhs.elems+8,"TradingEvent",12)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityTradingEvent); ret = true; break; }
9908 break;
9909 }
9910 }
9911 break;
9912 }
9913 case 21: {
9914 switch (algo::ReadLE64(rhs.elems)) {
9915 case LE_STR8('M','u','l','t','i','L','e','g'): {
9916 if (memcmp(rhs.elems+8,"ReportingType",13)==0) { value_SetEnum(parent,emdi12_FieldId_MultiLegReportingType); ret = true; break; }
9917 break;
9918 }
9919 case LE_STR8('Q','u','a','n','t','i','t','y'): {
9920 if (memcmp(rhs.elems+8,"ScalingFactor",13)==0) { value_SetEnum(parent,emdi12_FieldId_QuantityScalingFactor); ret = true; break; }
9921 break;
9922 }
9923 case LE_STR8('S','e','c','u','r','i','t','y'): {
9924 if (memcmp(rhs.elems+8,"TradingStatus",13)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityTradingStatus); ret = true; break; }
9925 break;
9926 }
9927 case LE_STR8('T','E','S','S','e','c','u','r'): {
9928 if (memcmp(rhs.elems+8,"ityMassStatus",13)==0) { value_SetEnum(parent,emdi12_FieldId_TESSecurityMassStatus); ret = true; break; }
9929 break;
9930 }
9931 }
9932 break;
9933 }
9934 case 22: {
9935 switch (algo::ReadLE64(rhs.elems)) {
9936 case LE_STR8('I','m','p','l','i','e','d','M'): {
9937 if (memcmp(rhs.elems+8,"arketIndicator",14)==0) { value_SetEnum(parent,emdi12_FieldId_ImpliedMarketIndicator); ret = true; break; }
9938 break;
9939 }
9940 case LE_STR8('L','a','s','t','M','s','g','S'): {
9941 if (memcmp(rhs.elems+8,"eqNumProcessed",14)==0) { value_SetEnum(parent,emdi12_FieldId_LastMsgSeqNumProcessed); ret = true; break; }
9942 break;
9943 }
9944 }
9945 break;
9946 }
9947 case 23: {
9948 switch (algo::ReadLE64(rhs.elems)) {
9949 case LE_STR8('N','o','n','D','i','s','c','l'): {
9950 if (memcmp(rhs.elems+8,"osedTradeVolume",15)==0) { value_SetEnum(parent,emdi12_FieldId_NonDisclosedTradeVolume); ret = true; break; }
9951 break;
9952 }
9953 case LE_STR8('R','e','l','a','t','e','d','S'): {
9954 if (memcmp(rhs.elems+8,"ecurityIDSource",15)==0) { value_SetEnum(parent,emdi12_FieldId_RelatedSecurityIDSource); ret = true; break; }
9955 break;
9956 }
9957 }
9958 break;
9959 }
9960 case 24: {
9961 switch (algo::ReadLE64(rhs.elems)) {
9962 case LE_STR8('S','e','c','u','r','i','t','y'): {
9963 if (memcmp(rhs.elems+8,"MassTradingEvent",16)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityMassTradingEvent); ret = true; break; }
9964 break;
9965 }
9966 }
9967 break;
9968 }
9969 case 25: {
9970 switch (algo::ReadLE64(rhs.elems)) {
9971 case LE_STR8('A','l','g','o','r','i','t','h'): {
9972 if (memcmp(rhs.elems+8,"micTradeIndicator",17)==0) { value_SetEnum(parent,emdi12_FieldId_AlgorithmicTradeIndicator); ret = true; break; }
9973 break;
9974 }
9975 case LE_STR8('S','e','c','u','r','i','t','y'): {
9976 if (memcmp(rhs.elems+8,"MassTradingStatus",17)==0) { value_SetEnum(parent,emdi12_FieldId_SecurityMassTradingStatus); ret = true; break; }
9977 break;
9978 }
9979 }
9980 break;
9981 }
9982 case 29: {
9983 switch (algo::ReadLE64(rhs.elems)) {
9984 case LE_STR8('I','n','s','t','r','u','m','e'): {
9985 if (memcmp(rhs.elems+8,"ntScopeProductComplex",21)==0) { value_SetEnum(parent,emdi12_FieldId_InstrumentScopeProductComplex); ret = true; break; }
9986 break;
9987 }
9988 case LE_STR8('P','o','t','e','n','t','i','a'): {
9989 if (memcmp(rhs.elems+8,"lSecurityTradingEvent",21)==0) { value_SetEnum(parent,emdi12_FieldId_PotentialSecurityTradingEvent); ret = true; break; }
9990 break;
9991 }
9992 }
9993 break;
9994 }
9995 }
9996 return ret;
9997}
9998
9999// --- emdi12.FieldId.value.SetStrptr
10000// Convert string to field.
10001// If the string is invalid, set numeric value to DFLT
10002void emdi12::value_SetStrptr(emdi12::FieldId& parent, algo::strptr rhs, emdi12_FieldIdEnum dflt) {
10003 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
10004}
10005
10006// --- emdi12.FieldId.value.ReadStrptrMaybe
10007// Convert string to field. Return success value
10008bool emdi12::value_ReadStrptrMaybe(emdi12::FieldId& parent, algo::strptr rhs) {
10009 bool retval = false;
10010 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
10011 if (!retval) { // didn't work? try reading as underlying type
10012 retval = i32_ReadStrptrMaybe(parent.value,rhs);
10013 }
10014 return retval;
10015}
10016
10017// --- emdi12.FieldId..ReadStrptrMaybe
10018// Read fields of emdi12::FieldId from an ascii string.
10019// The format of the string is the format of the emdi12::FieldId's only field
10020bool emdi12::FieldId_ReadStrptrMaybe(emdi12::FieldId &parent, algo::strptr in_str) {
10021 bool retval = true;
10022 retval = retval && value_ReadStrptrMaybe(parent, in_str);
10023 return retval;
10024}
10025
10026// --- emdi12.FieldId..Print
10027// print string representation of ROW to string STR
10028// cfmt:emdi12.FieldId.String printfmt:Raw
10029void emdi12::FieldId_Print(emdi12::FieldId& row, algo::cstring& str) {
10030 emdi12::value_Print(row, str);
10031}
10032
10033// --- emdi12.PutOrCall.value.ToCstr
10034// Convert numeric value of field to one of predefined string constants.
10035// If string is found, return a static C string. Otherwise, return NULL.
10036const char* emdi12::value_ToCstr(const emdi12::PutOrCall& parent) {
10037 const char *ret = NULL;
10038 switch(value_GetEnum(parent)) {
10039 case emdi12_PutOrCall_0 : ret = "0"; break;
10040 case emdi12_PutOrCall_1 : ret = "1"; break;
10041 }
10042 return ret;
10043}
10044
10045// --- emdi12.PutOrCall.value.Print
10046// Convert value to a string. First, attempt conversion to a known string.
10047// If no string matches, print value as a numeric value.
10048void emdi12::value_Print(const emdi12::PutOrCall& parent, algo::cstring &lhs) {
10049 const char *strval = value_ToCstr(parent);
10050 if (strval) {
10051 lhs << strval;
10052 } else {
10053 lhs << parent.value;
10054 }
10055}
10056
10057// --- emdi12.PutOrCall.value.SetStrptrMaybe
10058// Convert string to field.
10059// If the string is invalid, do not modify field and return false.
10060// In case of success, return true
10061bool emdi12::value_SetStrptrMaybe(emdi12::PutOrCall& parent, algo::strptr rhs) {
10062 bool ret = false;
10063 switch (elems_N(rhs)) {
10064 case 1: {
10065 switch (u64(rhs[0])) {
10066 case '0': {
10067 value_SetEnum(parent,emdi12_PutOrCall_0); ret = true; break;
10068 }
10069 case '1': {
10070 value_SetEnum(parent,emdi12_PutOrCall_1); ret = true; break;
10071 }
10072 }
10073 break;
10074 }
10075 }
10076 return ret;
10077}
10078
10079// --- emdi12.PutOrCall.value.SetStrptr
10080// Convert string to field.
10081// If the string is invalid, set numeric value to DFLT
10082void emdi12::value_SetStrptr(emdi12::PutOrCall& parent, algo::strptr rhs, emdi12_PutOrCallEnum dflt) {
10083 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
10084}
10085
10086// --- emdi12.PutOrCall.value.ReadStrptrMaybe
10087// Convert string to field. Return success value
10088bool emdi12::value_ReadStrptrMaybe(emdi12::PutOrCall& parent, algo::strptr rhs) {
10089 bool retval = false;
10090 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
10091 if (!retval) { // didn't work? try reading as underlying type
10092 retval = u32_ReadStrptrMaybe(parent.value,rhs);
10093 }
10094 return retval;
10095}
10096
10097// --- emdi12.PutOrCall..ReadStrptrMaybe
10098// Read fields of emdi12::PutOrCall from an ascii string.
10099// The format of the string is the format of the emdi12::PutOrCall's only field
10100bool emdi12::PutOrCall_ReadStrptrMaybe(emdi12::PutOrCall &parent, algo::strptr in_str) {
10101 bool retval = true;
10102 retval = retval && value_ReadStrptrMaybe(parent, in_str);
10103 return retval;
10104}
10105
10106// --- emdi12.PutOrCall..Print
10107// print string representation of ROW to string STR
10108// cfmt:emdi12.PutOrCall.String printfmt:Raw
10109void emdi12::PutOrCall_Print(emdi12::PutOrCall row, algo::cstring& str) {
10110 emdi12::value_Print(row, str);
10111}
10112
10113// --- emdi12.SettlMethod.value.ToCstr
10114// Convert numeric value of field to one of predefined string constants.
10115// If string is found, return a static C string. Otherwise, return NULL.
10116const char* emdi12::value_ToCstr(const emdi12::SettlMethod& parent) {
10117 const char *ret = NULL;
10118 switch(value_GetEnum(parent)) {
10119 case emdi12_SettlMethod_C : ret = "C"; break;
10120 case emdi12_SettlMethod_P : ret = "P"; break;
10121 }
10122 return ret;
10123}
10124
10125// --- emdi12.SettlMethod.value.Print
10126// Convert value to a string. First, attempt conversion to a known string.
10127// If no string matches, print value as a numeric value.
10128void emdi12::value_Print(const emdi12::SettlMethod& parent, algo::cstring &lhs) {
10129 const char *strval = value_ToCstr(parent);
10130 if (strval) {
10131 lhs << strval;
10132 } else {
10133 lhs << parent.value;
10134 }
10135}
10136
10137// --- emdi12.SettlMethod.value.SetStrptrMaybe
10138// Convert string to field.
10139// If the string is invalid, do not modify field and return false.
10140// In case of success, return true
10141bool emdi12::value_SetStrptrMaybe(emdi12::SettlMethod& parent, algo::strptr rhs) {
10142 bool ret = false;
10143 switch (elems_N(rhs)) {
10144 case 1: {
10145 switch (u64(rhs[0])) {
10146 case 'C': {
10147 value_SetEnum(parent,emdi12_SettlMethod_C); ret = true; break;
10148 }
10149 case 'P': {
10150 value_SetEnum(parent,emdi12_SettlMethod_P); ret = true; break;
10151 }
10152 }
10153 break;
10154 }
10155 }
10156 return ret;
10157}
10158
10159// --- emdi12.SettlMethod.value.SetStrptr
10160// Convert string to field.
10161// If the string is invalid, set numeric value to DFLT
10162void emdi12::value_SetStrptr(emdi12::SettlMethod& parent, algo::strptr rhs, emdi12_SettlMethodEnum dflt) {
10163 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
10164}
10165
10166// --- emdi12.SettlMethod.value.ReadStrptrMaybe
10167// Convert string to field. Return success value
10168bool emdi12::value_ReadStrptrMaybe(emdi12::SettlMethod& parent, algo::strptr rhs) {
10169 bool retval = false;
10170 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
10171 if (!retval) { // didn't work? try reading as underlying type
10172 retval = u32_ReadStrptrMaybe(parent.value,rhs);
10173 }
10174 return retval;
10175}
10176
10177// --- emdi12.SettlMethod..ReadStrptrMaybe
10178// Read fields of emdi12::SettlMethod from an ascii string.
10179// The format of the string is the format of the emdi12::SettlMethod's only field
10180bool emdi12::SettlMethod_ReadStrptrMaybe(emdi12::SettlMethod &parent, algo::strptr in_str) {
10181 bool retval = true;
10182 retval = retval && value_ReadStrptrMaybe(parent, in_str);
10183 return retval;
10184}
10185
10186// --- emdi12.SettlMethod..Print
10187// print string representation of ROW to string STR
10188// cfmt:emdi12.SettlMethod.String printfmt:Raw
10189void emdi12::SettlMethod_Print(emdi12::SettlMethod row, algo::cstring& str) {
10190 emdi12::value_Print(row, str);
10191}
10192
10193// --- emdi12.MarketSegmentGrp2..ReadFieldMaybe
10194bool emdi12::MarketSegmentGrp2_ReadFieldMaybe(emdi12::MarketSegmentGrp2& parent, algo::strptr field, algo::strptr strval) {
10195 bool retval = true;
10196 emdi12::FieldId field_id;
10197 (void)value_SetStrptrMaybe(field_id,field);
10198 switch(field_id) {
10199 case emdi12_FieldId_MarketSegmentID: {
10200 retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
10201 break;
10202 }
10203 default: break;
10204 }
10205 if (!retval) {
10206 algo_lib::AppendErrtext("attr",field);
10207 }
10208 return retval;
10209}
10210
10211// --- emdi12.MarketSegmentGrp2..ReadStrptrMaybe
10212// Read fields of emdi12::MarketSegmentGrp2 from an ascii string.
10213// The format of the string is an ssim Tuple
10214bool emdi12::MarketSegmentGrp2_ReadStrptrMaybe(emdi12::MarketSegmentGrp2 &parent, algo::strptr in_str) {
10215 bool retval = true;
10216 retval = algo::StripTypeTag(in_str, "emdi12.MarketSegmentGrp2");
10217 ind_beg(algo::Attr_curs, attr, in_str) {
10218 retval = retval && MarketSegmentGrp2_ReadFieldMaybe(parent, attr.name, attr.value);
10219 }ind_end;
10220 return retval;
10221}
10222
10223// --- emdi12.MarketSegmentGrp2..Print
10224// print string representation of ROW to string STR
10225// cfmt:emdi12.MarketSegmentGrp2.String printfmt:Tuple
10226void emdi12::MarketSegmentGrp2_Print(emdi12::MarketSegmentGrp2& row, algo::cstring& str) {
10227 algo::tempstr temp;
10228 str << "emdi12.MarketSegmentGrp2";
10229
10230 u32_Print(row.MarketSegmentID, temp);
10231 PrintAttrSpaceReset(str,"MarketSegmentID", temp);
10232}
10233
10234// --- emdi12.MarketSegmentGrp2..FastEncode
10235void emdi12::MarketSegmentGrp2_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MarketSegmentGrp2& parent) {
10236 int index = ary_N(buf);
10237 u64 pmap(0);
10238 // MarketSegmentID unsigned copy mandatory
10239 if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
10240 lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
10241 lib_fast::SetPmapBit(pmap,0);
10242 }
10243 state.MarketSegmentID = parent.MarketSegmentID;
10244 MarketSegmentID_SetAssigned(state);
10245 lib_fast::InsertPmap(buf,index,pmap);
10246}
10247
10248// --- emdi12.MarketSegmentGrp2..FastDecode
10249bool emdi12::MarketSegmentGrp2_FastDecode(algo::memptr& from, FastState& state, emdi12::MarketSegmentGrp2& parent) {
10250 bool ok = true;
10251 u64 pmap;
10252 ok = lib_fast::DecodePmap(from,pmap);
10253 if (!ok) {
10254 state.error << "emdi12.MarketSegmentGrp2: bad pmap" << eol;
10255 }
10256 // MarketSegmentID unsigned copy mandatory
10257 if (ok) {
10258 bool prs = lib_fast::GetPmapBit(pmap,0);
10259 if (prs) {
10260 ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
10261 if (!ok) {
10262 state.error << "emdi12.MarketSegmentGrp2.MarketSegmentID: bad Unsigned" << eol;
10263 }
10264 } else if (MarketSegmentID_AssignedQ(state)) {
10265 parent.MarketSegmentID = state.MarketSegmentID;
10266 } else {
10267 ok = false;
10268 state.error << "emdi12.MarketSegmentGrp2.MarketSegmentID: copy operator: previous value unassigned" << eol;
10269 }
10270 MarketSegmentID_SetAssigned(state);
10271 state.MarketSegmentID = parent.MarketSegmentID;
10272 }
10273 return ok;
10274}
10275
10276// --- emdi12.MarketSegmentGrp2..FixEncode
10277void emdi12::MarketSegmentGrp2_FixEncode(cstring& buf, emdi12::MarketSegmentGrp2& parent, char soh) {
10278 buf << "1300=" << parent.MarketSegmentID << soh;
10279}
10280
10281// --- emdi12.FlexibleInstrumentUpdate.base.CopyOut
10282// Copy fields out of row
10283void emdi12::parent_CopyOut(emdi12::FlexibleInstrumentUpdate &row, emdi12::TemplateHeader &out) {
10284 // length: field value is computed
10285 // id: field value is computed
10286 (void)row;//only to avoid -Wunused-parameter
10287 (void)out;//only to avoid -Wunused-parameter
10288}
10289
10290// --- emdi12.FlexibleInstrumentUpdate.MsgSeqNum.ReadStrptrMaybe
10291inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10292 bool retval = true;
10293 retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
10294 return retval;
10295}
10296
10297// --- emdi12.FlexibleInstrumentUpdate.SenderCompID.ReadStrptrMaybe
10298inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10299 bool retval = true;
10300 retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
10301 return retval;
10302}
10303
10304// --- emdi12.FlexibleInstrumentUpdate.SecurityID.ReadStrptrMaybe
10305inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10306 bool retval = true;
10307 retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
10308 return retval;
10309}
10310
10311// --- emdi12.FlexibleInstrumentUpdate.SecurityDesc.ReadStrptrMaybe
10312inline static bool emdi12::SecurityDesc_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10313 bool retval = true;
10314 retval = algo::Smallstr30_ReadStrptrMaybe(parent.SecurityDesc, in_str);
10315 return retval;
10316}
10317
10318// --- emdi12.FlexibleInstrumentUpdate.SecurityType.ReadStrptrMaybe
10319inline static bool emdi12::SecurityType_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10320 bool retval = true;
10321 retval = emdi12::SecurityType_ReadStrptrMaybe(parent.SecurityType, in_str);
10322 return retval;
10323}
10324
10325// --- emdi12.FlexibleInstrumentUpdate.ProductComplex.ReadStrptrMaybe
10326inline static bool emdi12::ProductComplex_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10327 bool retval = true;
10328 retval = emdi12::ProductComplex_ReadStrptrMaybe(parent.ProductComplex, in_str);
10329 return retval;
10330}
10331
10332// --- emdi12.FlexibleInstrumentUpdate.MaturityDate.ReadStrptrMaybe
10333inline static bool emdi12::MaturityDate_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10334 bool retval = true;
10335 retval = u32_ReadStrptrMaybe(parent.MaturityDate, in_str);
10336 return retval;
10337}
10338
10339// --- emdi12.FlexibleInstrumentUpdate.StrikePrice.ReadStrptrMaybe
10340inline static bool emdi12::StrikePrice_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10341 bool retval = true;
10342 algo::Decimal StrikePrice_tmp;
10343 retval = algo::Decimal_ReadStrptrMaybe(StrikePrice_tmp, in_str);
10344 if (retval) {
10345 StrikePrice_Set(parent, StrikePrice_tmp);
10346 }
10347 return retval;
10348}
10349
10350// --- emdi12.FlexibleInstrumentUpdate.PutOrCall.ReadStrptrMaybe
10351inline static bool emdi12::PutOrCall_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10352 bool retval = true;
10353 emdi12::PutOrCall PutOrCall_tmp;
10354 retval = emdi12::PutOrCall_ReadStrptrMaybe(PutOrCall_tmp, in_str);
10355 if (retval) {
10356 PutOrCall_Set(parent, PutOrCall_tmp);
10357 }
10358 return retval;
10359}
10360
10361// --- emdi12.FlexibleInstrumentUpdate.OptAttribute.ReadStrptrMaybe
10362inline static bool emdi12::OptAttribute_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10363 bool retval = true;
10364 u32 OptAttribute_tmp;
10365 retval = u32_ReadStrptrMaybe(OptAttribute_tmp, in_str);
10366 if (retval) {
10367 OptAttribute_Set(parent, OptAttribute_tmp);
10368 }
10369 return retval;
10370}
10371
10372// --- emdi12.FlexibleInstrumentUpdate.ExerciseStyle.ReadStrptrMaybe
10373inline static bool emdi12::ExerciseStyle_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10374 bool retval = true;
10375 emdi12::ExerciseStyle ExerciseStyle_tmp;
10376 retval = emdi12::ExerciseStyle_ReadStrptrMaybe(ExerciseStyle_tmp, in_str);
10377 if (retval) {
10378 ExerciseStyle_Set(parent, ExerciseStyle_tmp);
10379 }
10380 return retval;
10381}
10382
10383// --- emdi12.FlexibleInstrumentUpdate.SettlMethod.ReadStrptrMaybe
10384inline static bool emdi12::SettlMethod_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10385 bool retval = true;
10386 retval = emdi12::SettlMethod_ReadStrptrMaybe(parent.SettlMethod, in_str);
10387 return retval;
10388}
10389
10390// --- emdi12.FlexibleInstrumentUpdate.MarketSegmentGrp2.ReadStrptrMaybe
10391inline static bool emdi12::MarketSegmentGrp2_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10392 bool retval = true;
10393 retval = emdi12::MarketSegmentGrp2_ReadStrptrMaybe(parent.MarketSegmentGrp2, in_str);
10394 return retval;
10395}
10396
10397// --- emdi12.FlexibleInstrumentUpdate.TransactTime.ReadStrptrMaybe
10398inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10399 bool retval = true;
10400 retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
10401 return retval;
10402}
10403
10404// --- emdi12.FlexibleInstrumentUpdate.pmask_bitcurs.Next
10405// proceed to next item
10406void emdi12::FlexibleInstrumentUpdate_pmask_bitcurs_Next(FlexibleInstrumentUpdate_pmask_bitcurs &curs) {
10407 ++curs.bit;
10408 int index = curs.bit / 32;
10409 int offset = curs.bit % 32;
10410 for (; index < curs.n_elems; ++index, offset = 0) {
10411 u64 rest = curs.elems[index] >> offset;
10412 if (rest) {
10413 offset += algo::u64_BitScanForward(rest);
10414 break;
10415 }
10416 }
10417 curs.bit = index * 32 + offset;
10418}
10419
10420// --- emdi12.FlexibleInstrumentUpdate..ReadFieldMaybe
10421bool emdi12::FlexibleInstrumentUpdate_ReadFieldMaybe(emdi12::FlexibleInstrumentUpdate& parent, algo::strptr field, algo::strptr strval) {
10422 bool retval = true;
10423 emdi12::FieldId field_id;
10424 (void)value_SetStrptrMaybe(field_id,field);
10425 switch(field_id) {
10426 case emdi12_FieldId_base: {
10427 retval = false;
10428 break;
10429 }
10430 case emdi12_FieldId_length: {
10431 retval = false;
10432 break;
10433 }
10434 case emdi12_FieldId_id: {
10435 retval = false;
10436 break;
10437 }
10438 case emdi12_FieldId_pmask: {
10439 retval = false;
10440 break;
10441 }
10442 case emdi12_FieldId_MsgType: {
10443 retval = true;
10444 break;
10445 }
10446 case emdi12_FieldId_MsgSeqNum: {
10447 retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
10448 break;
10449 }
10450 case emdi12_FieldId_SenderCompID: {
10451 retval = SenderCompID_ReadStrptrMaybe(parent, strval);
10452 break;
10453 }
10454 case emdi12_FieldId_SecurityUpdateAction: {
10455 retval = true;
10456 break;
10457 }
10458 case emdi12_FieldId_SecurityID: {
10459 retval = SecurityID_ReadStrptrMaybe(parent, strval);
10460 break;
10461 }
10462 case emdi12_FieldId_SecurityIDSource: {
10463 retval = true;
10464 break;
10465 }
10466 case emdi12_FieldId_SecurityDesc: {
10467 retval = SecurityDesc_ReadStrptrMaybe(parent, strval);
10468 break;
10469 }
10470 case emdi12_FieldId_SecurityType: {
10471 retval = SecurityType_ReadStrptrMaybe(parent, strval);
10472 break;
10473 }
10474 case emdi12_FieldId_ProductComplex: {
10475 retval = ProductComplex_ReadStrptrMaybe(parent, strval);
10476 break;
10477 }
10478 case emdi12_FieldId_MaturityDate: {
10479 retval = MaturityDate_ReadStrptrMaybe(parent, strval);
10480 break;
10481 }
10482 case emdi12_FieldId_StrikePrice: {
10483 retval = StrikePrice_ReadStrptrMaybe(parent, strval);
10484 if (retval) {
10485 pmask_qSetBit(parent, 3);
10486 }
10487 break;
10488 }
10489 case emdi12_FieldId_PutOrCall: {
10490 retval = PutOrCall_ReadStrptrMaybe(parent, strval);
10491 if (retval) {
10492 pmask_qSetBit(parent, 2);
10493 }
10494 break;
10495 }
10496 case emdi12_FieldId_OptAttribute: {
10497 retval = OptAttribute_ReadStrptrMaybe(parent, strval);
10498 if (retval) {
10499 pmask_qSetBit(parent, 1);
10500 }
10501 break;
10502 }
10503 case emdi12_FieldId_ExerciseStyle: {
10504 retval = ExerciseStyle_ReadStrptrMaybe(parent, strval);
10505 if (retval) {
10506 pmask_qSetBit(parent, 0);
10507 }
10508 break;
10509 }
10510 case emdi12_FieldId_SettlMethod: {
10511 retval = SettlMethod_ReadStrptrMaybe(parent, strval);
10512 break;
10513 }
10514 case emdi12_FieldId_MarketSegmentGrp2: {
10515 retval = MarketSegmentGrp2_ReadStrptrMaybe(parent, strval);
10516 break;
10517 }
10518 case emdi12_FieldId_TransactTime: {
10519 retval = TransactTime_ReadStrptrMaybe(parent, strval);
10520 break;
10521 }
10522 default: break;
10523 }
10524 if (!retval) {
10525 algo_lib::AppendErrtext("attr",field);
10526 }
10527 return retval;
10528}
10529
10530// --- emdi12.FlexibleInstrumentUpdate..ReadStrptrMaybe
10531// Read fields of emdi12::FlexibleInstrumentUpdate from an ascii string.
10532// The format of the string is an ssim Tuple
10533bool emdi12::FlexibleInstrumentUpdate_ReadStrptrMaybe(emdi12::FlexibleInstrumentUpdate &parent, algo::strptr in_str) {
10534 bool retval = true;
10535 retval = algo::StripTypeTag(in_str, "emdi12.FlexibleInstrumentUpdate");
10536 ind_beg(algo::Attr_curs, attr, in_str) {
10537 retval = retval && FlexibleInstrumentUpdate_ReadFieldMaybe(parent, attr.name, attr.value);
10538 }ind_end;
10539 return retval;
10540}
10541
10542// --- emdi12.FlexibleInstrumentUpdate..Init
10543// Set all fields to initial values.
10544void emdi12::FlexibleInstrumentUpdate_Init(emdi12::FlexibleInstrumentUpdate& parent) {
10545 parent.length = u32(ssizeof(parent) + (0));
10546 parent.id = u32(100);
10547 parent.pmask = u32(0);
10548 parent.MsgSeqNum = u32(0);
10549 parent.SenderCompID = u32(0);
10550 parent.SecurityID = i64(0);
10551 parent.MaturityDate = u32(0);
10552 parent.StrikePrice = algo::Decimal(algo::Decimal(0,0));
10553 parent.OptAttribute = u32(0);
10554 parent.TransactTime = i64(0);
10555}
10556
10557// --- emdi12.FlexibleInstrumentUpdate..Print
10558// print string representation of ROW to string STR
10559// cfmt:emdi12.FlexibleInstrumentUpdate.String printfmt:Tuple
10560void emdi12::FlexibleInstrumentUpdate_Print(emdi12::FlexibleInstrumentUpdate& row, algo::cstring& str) {
10561 algo::tempstr temp;
10562 str << "emdi12.FlexibleInstrumentUpdate";
10563
10564 algo::strptr_Print(MsgType_Get(row), temp);
10565 PrintAttrSpaceReset(str,"MsgType", temp);
10566
10567 u32_Print(row.MsgSeqNum, temp);
10568 PrintAttrSpaceReset(str,"MsgSeqNum", temp);
10569
10570 u32_Print(row.SenderCompID, temp);
10571 PrintAttrSpaceReset(str,"SenderCompID", temp);
10572
10573 algo::strptr_Print(SecurityUpdateAction_Get(row), temp);
10574 PrintAttrSpaceReset(str,"SecurityUpdateAction", temp);
10575
10576 i64_Print(row.SecurityID, temp);
10577 PrintAttrSpaceReset(str,"SecurityID", temp);
10578
10579 algo::strptr_Print(SecurityIDSource_Get(row), temp);
10580 PrintAttrSpaceReset(str,"SecurityIDSource", temp);
10581
10582 algo::Smallstr30_Print(row.SecurityDesc, temp);
10583 PrintAttrSpaceReset(str,"SecurityDesc", temp);
10584
10585 emdi12::SecurityType_Print(row.SecurityType, temp);
10586 PrintAttrSpaceReset(str,"SecurityType", temp);
10587
10588 emdi12::ProductComplex_Print(row.ProductComplex, temp);
10589 PrintAttrSpaceReset(str,"ProductComplex", temp);
10590
10591 u32_Print(row.MaturityDate, temp);
10592 PrintAttrSpaceReset(str,"MaturityDate", temp);
10593
10594 if (StrikePrice_PresentQ(row)) {
10595 algo::Decimal_Print(row.StrikePrice, temp);
10596 PrintAttrSpaceReset(str,"StrikePrice", temp);
10597 }
10598
10599 if (PutOrCall_PresentQ(row)) {
10600 emdi12::PutOrCall_Print(row.PutOrCall, temp);
10601 PrintAttrSpaceReset(str,"PutOrCall", temp);
10602 }
10603
10604 if (OptAttribute_PresentQ(row)) {
10605 u32_Print(row.OptAttribute, temp);
10606 PrintAttrSpaceReset(str,"OptAttribute", temp);
10607 }
10608
10609 if (ExerciseStyle_PresentQ(row)) {
10610 emdi12::ExerciseStyle_Print(row.ExerciseStyle, temp);
10611 PrintAttrSpaceReset(str,"ExerciseStyle", temp);
10612 }
10613
10614 emdi12::SettlMethod_Print(row.SettlMethod, temp);
10615 PrintAttrSpaceReset(str,"SettlMethod", temp);
10616
10617 emdi12::MarketSegmentGrp2_Print(row.MarketSegmentGrp2, temp);
10618 PrintAttrSpaceReset(str,"MarketSegmentGrp2", temp);
10619
10620 i64_Print(row.TransactTime, temp);
10621 PrintAttrSpaceReset(str,"TransactTime", temp);
10622}
10623
10624// --- emdi12.FlexibleInstrumentUpdate..FastEncode
10625void emdi12::FlexibleInstrumentUpdate_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::FlexibleInstrumentUpdate& parent) {
10626 int index = ary_N(buf);
10627 u64 pmap(0);
10628 if (!tid_AssignedQ(state) || parent.id != state.tid) {
10629 lib_fast::EncodeUnsigned(buf,parent.id,false);
10630 lib_fast::SetPmapBit(pmap,0);
10631 }
10632 tid_SetAssigned(state);
10633 state.tid = parent.id;
10634 // MsgType string constant mandatory
10635 // MsgSeqNum unsigned increment mandatory
10636 if (MsgSeqNum_AssignedQ(state)) {
10637 if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
10638 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
10639 lib_fast::SetPmapBit(pmap,1);
10640 }
10641 } else {
10642 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
10643 lib_fast::SetPmapBit(pmap,1);
10644 }
10645 state.MsgSeqNum = parent.MsgSeqNum;
10646 MsgSeqNum_SetAssigned(state);
10647 // SenderCompID unsigned copy mandatory
10648 if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
10649 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
10650 lib_fast::SetPmapBit(pmap,2);
10651 }
10652 state.SenderCompID = parent.SenderCompID;
10653 SenderCompID_SetAssigned(state);
10654 // SecurityUpdateAction string constant mandatory
10655 // SecurityID signed none mandatory
10656 lib_fast::EncodeSigned(buf,parent.SecurityID,false);
10657 // SecurityIDSource string constant mandatory
10658 // SecurityDesc string none mandatory
10659 lib_fast::EncodeString(buf,parent.SecurityDesc,false);
10660 // SecurityType type none mandatory
10661 lib_fast::EncodeUnsigned(buf,parent.SecurityType.value,false);
10662 // ProductComplex type none mandatory
10663 lib_fast::EncodeUnsigned(buf,parent.ProductComplex.value,false);
10664 // MaturityDate unsigned none mandatory
10665 lib_fast::EncodeUnsigned(buf,parent.MaturityDate,false);
10666 // StrikePrice scaled none optional
10667 if (StrikePrice_PresentQ(parent)) {
10668 lib_fast::EncodeScaled(buf,parent.StrikePrice,true);
10669 } else {
10670 lib_fast::EncodeNull(buf);
10671 }
10672 // PutOrCall type none optional
10673 if (PutOrCall_PresentQ(parent)) {
10674 lib_fast::EncodeUnsigned(buf,parent.PutOrCall.value,true);
10675 } else {
10676 lib_fast::EncodeNull(buf);
10677 }
10678 // OptAttribute unsigned none optional
10679 if (OptAttribute_PresentQ(parent)) {
10680 lib_fast::EncodeUnsigned(buf,parent.OptAttribute,true);
10681 } else {
10682 lib_fast::EncodeNull(buf);
10683 }
10684 // ExerciseStyle type none optional
10685 if (ExerciseStyle_PresentQ(parent)) {
10686 lib_fast::EncodeUnsigned(buf,parent.ExerciseStyle.value,true);
10687 } else {
10688 lib_fast::EncodeNull(buf);
10689 }
10690 // SettlMethod type none mandatory
10691 lib_fast::EncodeUnsigned(buf,parent.SettlMethod.value,false);
10692 // MarketSegmentGrp2 sequence none mandatory
10693 MarketSegmentGrp2_FastEncode(buf,state,parent.MarketSegmentGrp2);
10694 // TransactTime signed none mandatory
10695 lib_fast::EncodeSigned(buf,parent.TransactTime,false);
10696 lib_fast::InsertPmap(buf,index,pmap);
10697}
10698
10699// --- emdi12.FlexibleInstrumentUpdate..FastDecode
10700bool emdi12::FlexibleInstrumentUpdate_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::FlexibleInstrumentUpdate& parent) {
10701 bool ok = true;
10702 // MsgType string constant mandatory
10703 if (ok) {
10704 }
10705 // MsgSeqNum unsigned increment mandatory
10706 if (ok) {
10707 bool prs = lib_fast::GetPmapBit(pmap,1);
10708 if (prs) {
10709 ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
10710 if (!ok) {
10711 state.error << "emdi12.FlexibleInstrumentUpdate.MsgSeqNum: bad Unsigned" << eol;
10712 }
10713 } else if (MsgSeqNum_AssignedQ(state)) {
10714 parent.MsgSeqNum = state.MsgSeqNum + 1;
10715 } else {
10716 ok = false;
10717 state.error << "emdi12.FlexibleInstrumentUpdate.MsgSeqNum: increment operator: previous value unassigned" << eol;
10718 }
10719 MsgSeqNum_SetAssigned(state);
10720 state.MsgSeqNum = parent.MsgSeqNum;
10721 }
10722 // SenderCompID unsigned copy mandatory
10723 if (ok) {
10724 bool prs = lib_fast::GetPmapBit(pmap,2);
10725 if (prs) {
10726 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
10727 if (!ok) {
10728 state.error << "emdi12.FlexibleInstrumentUpdate.SenderCompID: bad Unsigned" << eol;
10729 }
10730 } else if (SenderCompID_AssignedQ(state)) {
10731 parent.SenderCompID = state.SenderCompID;
10732 } else {
10733 ok = false;
10734 state.error << "emdi12.FlexibleInstrumentUpdate.SenderCompID: copy operator: previous value unassigned" << eol;
10735 }
10736 SenderCompID_SetAssigned(state);
10737 state.SenderCompID = parent.SenderCompID;
10738 }
10739 // SecurityUpdateAction string constant mandatory
10740 if (ok) {
10741 }
10742 // SecurityID signed none mandatory
10743 if (ok) {
10744 ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
10745 if (!ok) {
10746 state.error << "emdi12.FlexibleInstrumentUpdate.SecurityID: bad Signed" << eol;
10747 }
10748 }
10749 // SecurityIDSource string constant mandatory
10750 if (ok) {
10751 }
10752 // SecurityDesc string none mandatory
10753 if (ok) {
10754 ok = lib_fast::DecodeString(from,parent.SecurityDesc,false);
10755 if (!ok) {
10756 state.error << "emdi12.FlexibleInstrumentUpdate.SecurityDesc: bad String" << eol;
10757 }
10758 }
10759 // SecurityType type none mandatory
10760 if (ok) {
10761 ok = lib_fast::DecodeUnsigned(from,parent.SecurityType.value,false);
10762 if (!ok) {
10763 state.error << "emdi12.FlexibleInstrumentUpdate.SecurityType: bad Unsigned" << eol;
10764 }
10765 }
10766 // ProductComplex type none mandatory
10767 if (ok) {
10768 ok = lib_fast::DecodeUnsigned(from,parent.ProductComplex.value,false);
10769 if (!ok) {
10770 state.error << "emdi12.FlexibleInstrumentUpdate.ProductComplex: bad Unsigned" << eol;
10771 }
10772 }
10773 // MaturityDate unsigned none mandatory
10774 if (ok) {
10775 ok = lib_fast::DecodeUnsigned(from,parent.MaturityDate,false);
10776 if (!ok) {
10777 state.error << "emdi12.FlexibleInstrumentUpdate.MaturityDate: bad Unsigned" << eol;
10778 }
10779 }
10780 // StrikePrice scaled none optional
10781 if (ok) {
10782 bool prs = !lib_fast::DecodeNull(from);
10783 if (prs) {
10784 ok = lib_fast::DecodeScaled(from,parent.StrikePrice,true);
10785 if (!ok) {
10786 state.error << "emdi12.FlexibleInstrumentUpdate.StrikePrice: bad Scaled" << eol;
10787 }
10788 }
10789 pmask_qSetBitVal(parent,StrikePrice_Present_GetBit(parent),prs);
10790 }
10791 // PutOrCall type none optional
10792 if (ok) {
10793 bool prs = !lib_fast::DecodeNull(from);
10794 if (prs) {
10795 ok = lib_fast::DecodeUnsigned(from,parent.PutOrCall.value,true);
10796 if (!ok) {
10797 state.error << "emdi12.FlexibleInstrumentUpdate.PutOrCall: bad Unsigned" << eol;
10798 }
10799 }
10800 pmask_qSetBitVal(parent,PutOrCall_Present_GetBit(parent),prs);
10801 }
10802 // OptAttribute unsigned none optional
10803 if (ok) {
10804 bool prs = !lib_fast::DecodeNull(from);
10805 if (prs) {
10806 ok = lib_fast::DecodeUnsigned(from,parent.OptAttribute,true);
10807 if (!ok) {
10808 state.error << "emdi12.FlexibleInstrumentUpdate.OptAttribute: bad Unsigned" << eol;
10809 }
10810 }
10811 pmask_qSetBitVal(parent,OptAttribute_Present_GetBit(parent),prs);
10812 }
10813 // ExerciseStyle type none optional
10814 if (ok) {
10815 bool prs = !lib_fast::DecodeNull(from);
10816 if (prs) {
10817 ok = lib_fast::DecodeUnsigned(from,parent.ExerciseStyle.value,true);
10818 if (!ok) {
10819 state.error << "emdi12.FlexibleInstrumentUpdate.ExerciseStyle: bad Unsigned" << eol;
10820 }
10821 }
10822 pmask_qSetBitVal(parent,ExerciseStyle_Present_GetBit(parent),prs);
10823 }
10824 // SettlMethod type none mandatory
10825 if (ok) {
10826 ok = lib_fast::DecodeUnsigned(from,parent.SettlMethod.value,false);
10827 if (!ok) {
10828 state.error << "emdi12.FlexibleInstrumentUpdate.SettlMethod: bad Unsigned" << eol;
10829 }
10830 }
10831 // MarketSegmentGrp2 sequence none mandatory
10832 if (ok) {
10833 ok = MarketSegmentGrp2_FastDecode(from,state,parent.MarketSegmentGrp2);
10834 }
10835 // TransactTime signed none mandatory
10836 if (ok) {
10837 ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
10838 if (!ok) {
10839 state.error << "emdi12.FlexibleInstrumentUpdate.TransactTime: bad Signed" << eol;
10840 }
10841 }
10842 return ok;
10843}
10844
10845// --- emdi12.FlexibleInstrumentUpdate..FixEncode
10846void emdi12::FlexibleInstrumentUpdate_FixEncode(cstring& buf, emdi12::FlexibleInstrumentUpdate& parent, char soh) {
10847 buf << "35=" << MsgType_Get(parent) << soh;
10848 buf << "34=" << parent.MsgSeqNum << soh;
10849 buf << "49=" << parent.SenderCompID << soh;
10850 buf << "980=" << SecurityUpdateAction_Get(parent) << soh;
10851 buf << "48=" << parent.SecurityID << soh;
10852 buf << "22=" << SecurityIDSource_Get(parent) << soh;
10853 buf << "107=" << parent.SecurityDesc << soh;
10854 buf << "167=" << parent.SecurityType << soh;
10855 buf << "1227=" << parent.ProductComplex << soh;
10856 buf << "541=" << parent.MaturityDate << soh;
10857 if (StrikePrice_PresentQ(parent)) {
10858 buf << "202=" << parent.StrikePrice << soh;
10859 }
10860 if (PutOrCall_PresentQ(parent)) {
10861 buf << "201=" << parent.PutOrCall << soh;
10862 }
10863 if (OptAttribute_PresentQ(parent)) {
10864 buf << "206=" << parent.OptAttribute << soh;
10865 }
10866 if (ExerciseStyle_PresentQ(parent)) {
10867 buf << "1194=" << parent.ExerciseStyle << soh;
10868 }
10869 buf << "1193=" << parent.SettlMethod << soh;
10870 buf << "1310=1" << soh;
10871 buf << "60=" << parent.TransactTime << soh;
10872}
10873
10874// --- emdi12.InstrumentStateChange.base.CopyOut
10875// Copy fields out of row
10876void emdi12::parent_CopyOut(emdi12::InstrumentStateChange &row, emdi12::TemplateHeader &out) {
10877 // length: field value is computed
10878 // id: field value is computed
10879 (void)row;//only to avoid -Wunused-parameter
10880 (void)out;//only to avoid -Wunused-parameter
10881}
10882
10883// --- emdi12.InstrumentStateChange.MsgSeqNum.ReadStrptrMaybe
10884inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10885 bool retval = true;
10886 retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
10887 return retval;
10888}
10889
10890// --- emdi12.InstrumentStateChange.SenderCompID.ReadStrptrMaybe
10891inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10892 bool retval = true;
10893 retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
10894 return retval;
10895}
10896
10897// --- emdi12.InstrumentStateChange.MarketSegmentID.ReadStrptrMaybe
10898inline static bool emdi12::MarketSegmentID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10899 bool retval = true;
10900 retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, in_str);
10901 return retval;
10902}
10903
10904// --- emdi12.InstrumentStateChange.SecurityID.ReadStrptrMaybe
10905inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10906 bool retval = true;
10907 retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
10908 return retval;
10909}
10910
10911// --- emdi12.InstrumentStateChange.SecurityStatus.ReadStrptrMaybe
10912inline static bool emdi12::SecurityStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10913 bool retval = true;
10914 retval = emdi12::SecurityStatus_ReadStrptrMaybe(parent.SecurityStatus, in_str);
10915 return retval;
10916}
10917
10918// --- emdi12.InstrumentStateChange.SecurityTradingStatus.ReadStrptrMaybe
10919inline static bool emdi12::SecurityTradingStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10920 bool retval = true;
10921 emdi12::SecurityTradingStatus SecurityTradingStatus_tmp;
10922 retval = emdi12::SecurityTradingStatus_ReadStrptrMaybe(SecurityTradingStatus_tmp, in_str);
10923 if (retval) {
10924 SecurityTradingStatus_Set(parent, SecurityTradingStatus_tmp);
10925 }
10926 return retval;
10927}
10928
10929// --- emdi12.InstrumentStateChange.MarketCondition.ReadStrptrMaybe
10930inline static bool emdi12::MarketCondition_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10931 bool retval = true;
10932 retval = emdi12::MarketCondition_ReadStrptrMaybe(parent.MarketCondition, in_str);
10933 return retval;
10934}
10935
10936// --- emdi12.InstrumentStateChange.FastMarketIndicator.ReadStrptrMaybe
10937inline static bool emdi12::FastMarketIndicator_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10938 bool retval = true;
10939 retval = emdi12::FastMarketIndicator_ReadStrptrMaybe(parent.FastMarketIndicator, in_str);
10940 return retval;
10941}
10942
10943// --- emdi12.InstrumentStateChange.SecurityTradingEvent.ReadStrptrMaybe
10944inline static bool emdi12::SecurityTradingEvent_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10945 bool retval = true;
10946 emdi12::SecurityTradingEvent SecurityTradingEvent_tmp;
10947 retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(SecurityTradingEvent_tmp, in_str);
10948 if (retval) {
10949 SecurityTradingEvent_Set(parent, SecurityTradingEvent_tmp);
10950 }
10951 return retval;
10952}
10953
10954// --- emdi12.InstrumentStateChange.SoldOutIndicator.ReadStrptrMaybe
10955inline static bool emdi12::SoldOutIndicator_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10956 bool retval = true;
10957 emdi12::SoldOutIndicator SoldOutIndicator_tmp;
10958 retval = emdi12::SoldOutIndicator_ReadStrptrMaybe(SoldOutIndicator_tmp, in_str);
10959 if (retval) {
10960 SoldOutIndicator_Set(parent, SoldOutIndicator_tmp);
10961 }
10962 return retval;
10963}
10964
10965// --- emdi12.InstrumentStateChange.HighPx.ReadStrptrMaybe
10966inline static bool emdi12::HighPx_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10967 bool retval = true;
10968 algo::Decimal HighPx_tmp;
10969 retval = algo::Decimal_ReadStrptrMaybe(HighPx_tmp, in_str);
10970 if (retval) {
10971 HighPx_Set(parent, HighPx_tmp);
10972 }
10973 return retval;
10974}
10975
10976// --- emdi12.InstrumentStateChange.LowPx.ReadStrptrMaybe
10977inline static bool emdi12::LowPx_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10978 bool retval = true;
10979 algo::Decimal LowPx_tmp;
10980 retval = algo::Decimal_ReadStrptrMaybe(LowPx_tmp, in_str);
10981 if (retval) {
10982 LowPx_Set(parent, LowPx_tmp);
10983 }
10984 return retval;
10985}
10986
10987// --- emdi12.InstrumentStateChange.TransactTime.ReadStrptrMaybe
10988inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10989 bool retval = true;
10990 retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
10991 return retval;
10992}
10993
10994// --- emdi12.InstrumentStateChange.TESSecurityStatus.ReadStrptrMaybe
10995inline static bool emdi12::TESSecurityStatus_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
10996 bool retval = true;
10997 emdi12::SecurityStatus TESSecurityStatus_tmp;
10998 retval = emdi12::SecurityStatus_ReadStrptrMaybe(TESSecurityStatus_tmp, in_str);
10999 if (retval) {
11000 TESSecurityStatus_Set(parent, TESSecurityStatus_tmp);
11001 }
11002 return retval;
11003}
11004
11005// --- emdi12.InstrumentStateChange.pmask_bitcurs.Next
11006// proceed to next item
11007void emdi12::InstrumentStateChange_pmask_bitcurs_Next(InstrumentStateChange_pmask_bitcurs &curs) {
11008 ++curs.bit;
11009 int index = curs.bit / 32;
11010 int offset = curs.bit % 32;
11011 for (; index < curs.n_elems; ++index, offset = 0) {
11012 u64 rest = curs.elems[index] >> offset;
11013 if (rest) {
11014 offset += algo::u64_BitScanForward(rest);
11015 break;
11016 }
11017 }
11018 curs.bit = index * 32 + offset;
11019}
11020
11021// --- emdi12.InstrumentStateChange..ReadFieldMaybe
11022bool emdi12::InstrumentStateChange_ReadFieldMaybe(emdi12::InstrumentStateChange& parent, algo::strptr field, algo::strptr strval) {
11023 bool retval = true;
11024 emdi12::FieldId field_id;
11025 (void)value_SetStrptrMaybe(field_id,field);
11026 switch(field_id) {
11027 case emdi12_FieldId_base: {
11028 retval = false;
11029 break;
11030 }
11031 case emdi12_FieldId_length: {
11032 retval = false;
11033 break;
11034 }
11035 case emdi12_FieldId_id: {
11036 retval = false;
11037 break;
11038 }
11039 case emdi12_FieldId_pmask: {
11040 retval = false;
11041 break;
11042 }
11043 case emdi12_FieldId_MsgType: {
11044 retval = true;
11045 break;
11046 }
11047 case emdi12_FieldId_MsgSeqNum: {
11048 retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
11049 break;
11050 }
11051 case emdi12_FieldId_SenderCompID: {
11052 retval = SenderCompID_ReadStrptrMaybe(parent, strval);
11053 break;
11054 }
11055 case emdi12_FieldId_MarketSegmentID: {
11056 retval = MarketSegmentID_ReadStrptrMaybe(parent, strval);
11057 break;
11058 }
11059 case emdi12_FieldId_SecurityID: {
11060 retval = SecurityID_ReadStrptrMaybe(parent, strval);
11061 break;
11062 }
11063 case emdi12_FieldId_SecurityIDSource: {
11064 retval = true;
11065 break;
11066 }
11067 case emdi12_FieldId_SecurityStatus: {
11068 retval = SecurityStatus_ReadStrptrMaybe(parent, strval);
11069 break;
11070 }
11071 case emdi12_FieldId_SecurityTradingStatus: {
11072 retval = SecurityTradingStatus_ReadStrptrMaybe(parent, strval);
11073 if (retval) {
11074 pmask_qSetBit(parent, 3);
11075 }
11076 break;
11077 }
11078 case emdi12_FieldId_MarketCondition: {
11079 retval = MarketCondition_ReadStrptrMaybe(parent, strval);
11080 break;
11081 }
11082 case emdi12_FieldId_FastMarketIndicator: {
11083 retval = FastMarketIndicator_ReadStrptrMaybe(parent, strval);
11084 break;
11085 }
11086 case emdi12_FieldId_SecurityTradingEvent: {
11087 retval = SecurityTradingEvent_ReadStrptrMaybe(parent, strval);
11088 if (retval) {
11089 pmask_qSetBit(parent, 2);
11090 }
11091 break;
11092 }
11093 case emdi12_FieldId_SoldOutIndicator: {
11094 retval = SoldOutIndicator_ReadStrptrMaybe(parent, strval);
11095 if (retval) {
11096 pmask_qSetBit(parent, 4);
11097 }
11098 break;
11099 }
11100 case emdi12_FieldId_HighPx: {
11101 retval = HighPx_ReadStrptrMaybe(parent, strval);
11102 if (retval) {
11103 pmask_qSetBit(parent, 0);
11104 }
11105 break;
11106 }
11107 case emdi12_FieldId_LowPx: {
11108 retval = LowPx_ReadStrptrMaybe(parent, strval);
11109 if (retval) {
11110 pmask_qSetBit(parent, 1);
11111 }
11112 break;
11113 }
11114 case emdi12_FieldId_TransactTime: {
11115 retval = TransactTime_ReadStrptrMaybe(parent, strval);
11116 break;
11117 }
11118 case emdi12_FieldId_TESSecurityStatus: {
11119 retval = TESSecurityStatus_ReadStrptrMaybe(parent, strval);
11120 if (retval) {
11121 pmask_qSetBit(parent, 5);
11122 }
11123 break;
11124 }
11125 default: break;
11126 }
11127 if (!retval) {
11128 algo_lib::AppendErrtext("attr",field);
11129 }
11130 return retval;
11131}
11132
11133// --- emdi12.InstrumentStateChange..ReadStrptrMaybe
11134// Read fields of emdi12::InstrumentStateChange from an ascii string.
11135// The format of the string is an ssim Tuple
11136bool emdi12::InstrumentStateChange_ReadStrptrMaybe(emdi12::InstrumentStateChange &parent, algo::strptr in_str) {
11137 bool retval = true;
11138 retval = algo::StripTypeTag(in_str, "emdi12.InstrumentStateChange");
11139 ind_beg(algo::Attr_curs, attr, in_str) {
11140 retval = retval && InstrumentStateChange_ReadFieldMaybe(parent, attr.name, attr.value);
11141 }ind_end;
11142 return retval;
11143}
11144
11145// --- emdi12.InstrumentStateChange..Init
11146// Set all fields to initial values.
11147void emdi12::InstrumentStateChange_Init(emdi12::InstrumentStateChange& parent) {
11148 parent.length = u32(ssizeof(parent) + (0));
11149 parent.id = u32(98);
11150 parent.pmask = u32(0);
11151 parent.MsgSeqNum = u32(0);
11152 parent.SenderCompID = u32(0);
11153 parent.MarketSegmentID = u32(0);
11154 parent.SecurityID = i64(0);
11155 parent.SecurityStatus = emdi12_SecurityStatusEnum(0);
11156 parent.MarketCondition = emdi12_MarketConditionEnum(0);
11157 parent.FastMarketIndicator = emdi12_FastMarketIndicatorEnum(0);
11158 parent.HighPx = algo::Decimal(algo::Decimal(0,0));
11159 parent.LowPx = algo::Decimal(algo::Decimal(0,0));
11160 parent.TransactTime = i64(0);
11161 parent.TESSecurityStatus = emdi12_SecurityStatusEnum(0);
11162}
11163
11164// --- emdi12.InstrumentStateChange..Print
11165// print string representation of ROW to string STR
11166// cfmt:emdi12.InstrumentStateChange.String printfmt:Tuple
11167void emdi12::InstrumentStateChange_Print(emdi12::InstrumentStateChange& row, algo::cstring& str) {
11168 algo::tempstr temp;
11169 str << "emdi12.InstrumentStateChange";
11170
11171 algo::strptr_Print(MsgType_Get(row), temp);
11172 PrintAttrSpaceReset(str,"MsgType", temp);
11173
11174 u32_Print(row.MsgSeqNum, temp);
11175 PrintAttrSpaceReset(str,"MsgSeqNum", temp);
11176
11177 u32_Print(row.SenderCompID, temp);
11178 PrintAttrSpaceReset(str,"SenderCompID", temp);
11179
11180 u32_Print(row.MarketSegmentID, temp);
11181 PrintAttrSpaceReset(str,"MarketSegmentID", temp);
11182
11183 i64_Print(row.SecurityID, temp);
11184 PrintAttrSpaceReset(str,"SecurityID", temp);
11185
11186 algo::strptr_Print(SecurityIDSource_Get(row), temp);
11187 PrintAttrSpaceReset(str,"SecurityIDSource", temp);
11188
11189 emdi12::SecurityStatus_Print(row.SecurityStatus, temp);
11190 PrintAttrSpaceReset(str,"SecurityStatus", temp);
11191
11192 if (SecurityTradingStatus_PresentQ(row)) {
11193 emdi12::SecurityTradingStatus_Print(row.SecurityTradingStatus, temp);
11194 PrintAttrSpaceReset(str,"SecurityTradingStatus", temp);
11195 }
11196
11197 emdi12::MarketCondition_Print(row.MarketCondition, temp);
11198 PrintAttrSpaceReset(str,"MarketCondition", temp);
11199
11200 emdi12::FastMarketIndicator_Print(row.FastMarketIndicator, temp);
11201 PrintAttrSpaceReset(str,"FastMarketIndicator", temp);
11202
11203 if (SecurityTradingEvent_PresentQ(row)) {
11204 emdi12::SecurityTradingEvent_Print(row.SecurityTradingEvent, temp);
11205 PrintAttrSpaceReset(str,"SecurityTradingEvent", temp);
11206 }
11207
11208 if (SoldOutIndicator_PresentQ(row)) {
11209 emdi12::SoldOutIndicator_Print(row.SoldOutIndicator, temp);
11210 PrintAttrSpaceReset(str,"SoldOutIndicator", temp);
11211 }
11212
11213 if (HighPx_PresentQ(row)) {
11214 algo::Decimal_Print(row.HighPx, temp);
11215 PrintAttrSpaceReset(str,"HighPx", temp);
11216 }
11217
11218 if (LowPx_PresentQ(row)) {
11219 algo::Decimal_Print(row.LowPx, temp);
11220 PrintAttrSpaceReset(str,"LowPx", temp);
11221 }
11222
11223 i64_Print(row.TransactTime, temp);
11224 PrintAttrSpaceReset(str,"TransactTime", temp);
11225
11226 if (TESSecurityStatus_PresentQ(row)) {
11227 emdi12::SecurityStatus_Print(row.TESSecurityStatus, temp);
11228 PrintAttrSpaceReset(str,"TESSecurityStatus", temp);
11229 }
11230}
11231
11232// --- emdi12.InstrumentStateChange..FastEncode
11233void emdi12::InstrumentStateChange_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::InstrumentStateChange& parent) {
11234 int index = ary_N(buf);
11235 u64 pmap(0);
11236 if (!tid_AssignedQ(state) || parent.id != state.tid) {
11237 lib_fast::EncodeUnsigned(buf,parent.id,false);
11238 lib_fast::SetPmapBit(pmap,0);
11239 }
11240 tid_SetAssigned(state);
11241 state.tid = parent.id;
11242 // MsgType string constant mandatory
11243 // MsgSeqNum unsigned increment mandatory
11244 if (MsgSeqNum_AssignedQ(state)) {
11245 if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
11246 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
11247 lib_fast::SetPmapBit(pmap,1);
11248 }
11249 } else {
11250 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
11251 lib_fast::SetPmapBit(pmap,1);
11252 }
11253 state.MsgSeqNum = parent.MsgSeqNum;
11254 MsgSeqNum_SetAssigned(state);
11255 // SenderCompID unsigned copy mandatory
11256 if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
11257 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
11258 lib_fast::SetPmapBit(pmap,2);
11259 }
11260 state.SenderCompID = parent.SenderCompID;
11261 SenderCompID_SetAssigned(state);
11262 // MarketSegmentID unsigned copy mandatory
11263 if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
11264 lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
11265 lib_fast::SetPmapBit(pmap,3);
11266 }
11267 state.MarketSegmentID = parent.MarketSegmentID;
11268 MarketSegmentID_SetAssigned(state);
11269 // SecurityID signed none mandatory
11270 lib_fast::EncodeSigned(buf,parent.SecurityID,false);
11271 // SecurityIDSource string constant mandatory
11272 // SecurityStatus type default mandatory
11273 if (parent.SecurityStatus.value != 0) {
11274 lib_fast::EncodeUnsigned(buf,parent.SecurityStatus.value,false);
11275 lib_fast::SetPmapBit(pmap,4);
11276 }
11277 // SecurityTradingStatus type copy optional
11278 if (SecurityTradingStatus_PresentQ(parent)) {
11279 if (!SecurityTradingStatus_AssignedQ(state) || !SecurityTradingStatus_PresentQ(state) || parent.SecurityTradingStatus.value != state.SecurityTradingStatus.value ) {
11280 lib_fast::EncodeUnsigned(buf,parent.SecurityTradingStatus.value,true);
11281 lib_fast::SetPmapBit(pmap,5);
11282 }
11283 } else {
11284 if (SecurityTradingStatus_AssignedQ(state)) {
11285 lib_fast::EncodeNull(buf);
11286 lib_fast::SetPmapBit(pmap,5);
11287 }
11288 }
11289 state.SecurityTradingStatus.value = parent.SecurityTradingStatus.value;
11290 present_qSetBitVal(state,SecurityTradingStatus_Present_GetBit(state),SecurityTradingStatus_PresentQ(parent));
11291 SecurityTradingStatus_SetAssigned(state);
11292 // MarketCondition type default mandatory
11293 if (parent.MarketCondition.value != 0) {
11294 lib_fast::EncodeUnsigned(buf,parent.MarketCondition.value,false);
11295 lib_fast::SetPmapBit(pmap,6);
11296 }
11297 // FastMarketIndicator type default mandatory
11298 if (parent.FastMarketIndicator.value != 0) {
11299 lib_fast::EncodeUnsigned(buf,parent.FastMarketIndicator.value,false);
11300 lib_fast::SetPmapBit(pmap,7);
11301 }
11302 // SecurityTradingEvent type copy optional
11303 if (SecurityTradingEvent_PresentQ(parent)) {
11304 if (!SecurityTradingEvent_AssignedQ(state) || !SecurityTradingEvent_PresentQ(state) || parent.SecurityTradingEvent.value != state.SecurityTradingEvent.value ) {
11305 lib_fast::EncodeUnsigned(buf,parent.SecurityTradingEvent.value,true);
11306 lib_fast::SetPmapBit(pmap,8);
11307 }
11308 } else {
11309 if (SecurityTradingEvent_AssignedQ(state)) {
11310 lib_fast::EncodeNull(buf);
11311 lib_fast::SetPmapBit(pmap,8);
11312 }
11313 }
11314 state.SecurityTradingEvent.value = parent.SecurityTradingEvent.value;
11315 present_qSetBitVal(state,SecurityTradingEvent_Present_GetBit(state),SecurityTradingEvent_PresentQ(parent));
11316 SecurityTradingEvent_SetAssigned(state);
11317 // SoldOutIndicator type copy optional
11318 if (SoldOutIndicator_PresentQ(parent)) {
11319 if (!SoldOutIndicator_AssignedQ(state) || !SoldOutIndicator_PresentQ(state) || parent.SoldOutIndicator.value != state.SoldOutIndicator.value ) {
11320 lib_fast::EncodeUnsigned(buf,parent.SoldOutIndicator.value,true);
11321 lib_fast::SetPmapBit(pmap,9);
11322 }
11323 } else {
11324 if (SoldOutIndicator_AssignedQ(state)) {
11325 lib_fast::EncodeNull(buf);
11326 lib_fast::SetPmapBit(pmap,9);
11327 }
11328 }
11329 state.SoldOutIndicator.value = parent.SoldOutIndicator.value;
11330 present_qSetBitVal(state,SoldOutIndicator_Present_GetBit(state),SoldOutIndicator_PresentQ(parent));
11331 SoldOutIndicator_SetAssigned(state);
11332 // HighPx scaled copy optional
11333 if (HighPx_PresentQ(parent)) {
11334 if (HighPx_AssignedQ(state) ? !HighPx_PresentQ(state) || parent.HighPx != state.HighPx : parent.HighPx != algo::Decimal(0,0)) {
11335 lib_fast::EncodeScaled(buf,parent.HighPx,true);
11336 lib_fast::SetPmapBit(pmap,10);
11337 }
11338 } else {
11339 if (HighPx_AssignedQ(state) && HighPx_PresentQ(state)) {
11340 lib_fast::EncodeNull(buf);
11341 lib_fast::SetPmapBit(pmap,10);
11342 }
11343 }
11344 state.HighPx = parent.HighPx;
11345 present_qSetBitVal(state,HighPx_Present_GetBit(state),HighPx_PresentQ(parent));
11346 HighPx_SetAssigned(state);
11347 // LowPx scaled copy optional
11348 if (LowPx_PresentQ(parent)) {
11349 if (LowPx_AssignedQ(state) ? !LowPx_PresentQ(state) || parent.LowPx != state.LowPx : parent.LowPx != algo::Decimal(0,0)) {
11350 lib_fast::EncodeScaled(buf,parent.LowPx,true);
11351 lib_fast::SetPmapBit(pmap,11);
11352 }
11353 } else {
11354 if (LowPx_AssignedQ(state) && LowPx_PresentQ(state)) {
11355 lib_fast::EncodeNull(buf);
11356 lib_fast::SetPmapBit(pmap,11);
11357 }
11358 }
11359 state.LowPx = parent.LowPx;
11360 present_qSetBitVal(state,LowPx_Present_GetBit(state),LowPx_PresentQ(parent));
11361 LowPx_SetAssigned(state);
11362 // TransactTime signed delta mandatory
11363 if (!TransactTime_AssignedQ(state)) {
11364 TransactTime_SetAssigned(state);
11365 state.TransactTime = 0;
11366 }
11367 lib_fast::EncodeDeltaSigned(buf,state.TransactTime,parent.TransactTime,false);
11368 state.TransactTime = parent.TransactTime;
11369 // TESSecurityStatus type default optional
11370 if (TESSecurityStatus_PresentQ(parent)) {
11371 if (parent.TESSecurityStatus.value != 0) {
11372 lib_fast::EncodeUnsigned(buf,parent.TESSecurityStatus.value,true);
11373 lib_fast::SetPmapBit(pmap,12);
11374 }
11375 } else {
11376 lib_fast::EncodeNull(buf);
11377 lib_fast::SetPmapBit(pmap,12);
11378 }
11379 lib_fast::InsertPmap(buf,index,pmap);
11380}
11381
11382// --- emdi12.InstrumentStateChange..FastDecode
11383bool emdi12::InstrumentStateChange_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::InstrumentStateChange& parent) {
11384 bool ok = true;
11385 // MsgType string constant mandatory
11386 if (ok) {
11387 }
11388 // MsgSeqNum unsigned increment mandatory
11389 if (ok) {
11390 bool prs = lib_fast::GetPmapBit(pmap,1);
11391 if (prs) {
11392 ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
11393 if (!ok) {
11394 state.error << "emdi12.InstrumentStateChange.MsgSeqNum: bad Unsigned" << eol;
11395 }
11396 } else if (MsgSeqNum_AssignedQ(state)) {
11397 parent.MsgSeqNum = state.MsgSeqNum + 1;
11398 } else {
11399 ok = false;
11400 state.error << "emdi12.InstrumentStateChange.MsgSeqNum: increment operator: previous value unassigned" << eol;
11401 }
11402 MsgSeqNum_SetAssigned(state);
11403 state.MsgSeqNum = parent.MsgSeqNum;
11404 }
11405 // SenderCompID unsigned copy mandatory
11406 if (ok) {
11407 bool prs = lib_fast::GetPmapBit(pmap,2);
11408 if (prs) {
11409 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
11410 if (!ok) {
11411 state.error << "emdi12.InstrumentStateChange.SenderCompID: bad Unsigned" << eol;
11412 }
11413 } else if (SenderCompID_AssignedQ(state)) {
11414 parent.SenderCompID = state.SenderCompID;
11415 } else {
11416 ok = false;
11417 state.error << "emdi12.InstrumentStateChange.SenderCompID: copy operator: previous value unassigned" << eol;
11418 }
11419 SenderCompID_SetAssigned(state);
11420 state.SenderCompID = parent.SenderCompID;
11421 }
11422 // MarketSegmentID unsigned copy mandatory
11423 if (ok) {
11424 bool prs = lib_fast::GetPmapBit(pmap,3);
11425 if (prs) {
11426 ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
11427 if (!ok) {
11428 state.error << "emdi12.InstrumentStateChange.MarketSegmentID: bad Unsigned" << eol;
11429 }
11430 } else if (MarketSegmentID_AssignedQ(state)) {
11431 parent.MarketSegmentID = state.MarketSegmentID;
11432 } else {
11433 ok = false;
11434 state.error << "emdi12.InstrumentStateChange.MarketSegmentID: copy operator: previous value unassigned" << eol;
11435 }
11436 MarketSegmentID_SetAssigned(state);
11437 state.MarketSegmentID = parent.MarketSegmentID;
11438 }
11439 // SecurityID signed none mandatory
11440 if (ok) {
11441 ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
11442 if (!ok) {
11443 state.error << "emdi12.InstrumentStateChange.SecurityID: bad Signed" << eol;
11444 }
11445 }
11446 // SecurityIDSource string constant mandatory
11447 if (ok) {
11448 }
11449 // SecurityStatus type default mandatory
11450 if (ok) {
11451 bool prs = lib_fast::GetPmapBit(pmap,4);
11452 if (prs) {
11453 ok = lib_fast::DecodeUnsigned(from,parent.SecurityStatus.value,false);
11454 if (!ok) {
11455 state.error << "emdi12.InstrumentStateChange.SecurityStatus: bad Unsigned" << eol;
11456 }
11457 } else {
11458 parent.SecurityStatus.value = 0;
11459 }
11460 }
11461 // SecurityTradingStatus type copy optional
11462 if (ok) {
11463 bool prs = lib_fast::GetPmapBit(pmap,5);
11464 if (prs) {
11465 prs = !lib_fast::DecodeNull(from);
11466 if (prs) {
11467 ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingStatus.value,true);
11468 if (!ok) {
11469 state.error << "emdi12.InstrumentStateChange.SecurityTradingStatus: bad Unsigned" << eol;
11470 }
11471 }
11472 } else if (SecurityTradingStatus_AssignedQ(state)) {
11473 parent.SecurityTradingStatus.value = state.SecurityTradingStatus.value;
11474 prs = SecurityTradingStatus_PresentQ(state);
11475 } else {
11476 prs = false;
11477 }
11478 pmask_qSetBitVal(parent,SecurityTradingStatus_Present_GetBit(parent),prs);
11479 SecurityTradingStatus_SetAssigned(state);
11480 present_qSetBitVal(state,SecurityTradingStatus_Present_GetBit(state),prs);
11481 state.SecurityTradingStatus.value = parent.SecurityTradingStatus.value;
11482 }
11483 // MarketCondition type default mandatory
11484 if (ok) {
11485 bool prs = lib_fast::GetPmapBit(pmap,6);
11486 if (prs) {
11487 ok = lib_fast::DecodeUnsigned(from,parent.MarketCondition.value,false);
11488 if (!ok) {
11489 state.error << "emdi12.InstrumentStateChange.MarketCondition: bad Unsigned" << eol;
11490 }
11491 } else {
11492 parent.MarketCondition.value = 0;
11493 }
11494 }
11495 // FastMarketIndicator type default mandatory
11496 if (ok) {
11497 bool prs = lib_fast::GetPmapBit(pmap,7);
11498 if (prs) {
11499 ok = lib_fast::DecodeUnsigned(from,parent.FastMarketIndicator.value,false);
11500 if (!ok) {
11501 state.error << "emdi12.InstrumentStateChange.FastMarketIndicator: bad Unsigned" << eol;
11502 }
11503 } else {
11504 parent.FastMarketIndicator.value = 0;
11505 }
11506 }
11507 // SecurityTradingEvent type copy optional
11508 if (ok) {
11509 bool prs = lib_fast::GetPmapBit(pmap,8);
11510 if (prs) {
11511 prs = !lib_fast::DecodeNull(from);
11512 if (prs) {
11513 ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingEvent.value,true);
11514 if (!ok) {
11515 state.error << "emdi12.InstrumentStateChange.SecurityTradingEvent: bad Unsigned" << eol;
11516 }
11517 }
11518 } else if (SecurityTradingEvent_AssignedQ(state)) {
11519 parent.SecurityTradingEvent.value = state.SecurityTradingEvent.value;
11520 prs = SecurityTradingEvent_PresentQ(state);
11521 } else {
11522 prs = false;
11523 }
11524 pmask_qSetBitVal(parent,SecurityTradingEvent_Present_GetBit(parent),prs);
11525 SecurityTradingEvent_SetAssigned(state);
11526 present_qSetBitVal(state,SecurityTradingEvent_Present_GetBit(state),prs);
11527 state.SecurityTradingEvent.value = parent.SecurityTradingEvent.value;
11528 }
11529 // SoldOutIndicator type copy optional
11530 if (ok) {
11531 bool prs = lib_fast::GetPmapBit(pmap,9);
11532 if (prs) {
11533 prs = !lib_fast::DecodeNull(from);
11534 if (prs) {
11535 ok = lib_fast::DecodeUnsigned(from,parent.SoldOutIndicator.value,true);
11536 if (!ok) {
11537 state.error << "emdi12.InstrumentStateChange.SoldOutIndicator: bad Unsigned" << eol;
11538 }
11539 }
11540 } else if (SoldOutIndicator_AssignedQ(state)) {
11541 parent.SoldOutIndicator.value = state.SoldOutIndicator.value;
11542 prs = SoldOutIndicator_PresentQ(state);
11543 } else {
11544 prs = false;
11545 }
11546 pmask_qSetBitVal(parent,SoldOutIndicator_Present_GetBit(parent),prs);
11547 SoldOutIndicator_SetAssigned(state);
11548 present_qSetBitVal(state,SoldOutIndicator_Present_GetBit(state),prs);
11549 state.SoldOutIndicator.value = parent.SoldOutIndicator.value;
11550 }
11551 // HighPx scaled copy optional
11552 if (ok) {
11553 bool prs = lib_fast::GetPmapBit(pmap,10);
11554 if (prs) {
11555 prs = !lib_fast::DecodeNull(from);
11556 if (prs) {
11557 ok = lib_fast::DecodeScaled(from,parent.HighPx,true);
11558 if (!ok) {
11559 state.error << "emdi12.InstrumentStateChange.HighPx: bad Scaled" << eol;
11560 }
11561 }
11562 } else if (HighPx_AssignedQ(state)) {
11563 parent.HighPx = state.HighPx;
11564 prs = HighPx_PresentQ(state);
11565 } else {
11566 parent.HighPx = algo::Decimal(0,0);
11567 prs = true;
11568 }
11569 pmask_qSetBitVal(parent,HighPx_Present_GetBit(parent),prs);
11570 HighPx_SetAssigned(state);
11571 present_qSetBitVal(state,HighPx_Present_GetBit(state),prs);
11572 state.HighPx = parent.HighPx;
11573 }
11574 // LowPx scaled copy optional
11575 if (ok) {
11576 bool prs = lib_fast::GetPmapBit(pmap,11);
11577 if (prs) {
11578 prs = !lib_fast::DecodeNull(from);
11579 if (prs) {
11580 ok = lib_fast::DecodeScaled(from,parent.LowPx,true);
11581 if (!ok) {
11582 state.error << "emdi12.InstrumentStateChange.LowPx: bad Scaled" << eol;
11583 }
11584 }
11585 } else if (LowPx_AssignedQ(state)) {
11586 parent.LowPx = state.LowPx;
11587 prs = LowPx_PresentQ(state);
11588 } else {
11589 parent.LowPx = algo::Decimal(0,0);
11590 prs = true;
11591 }
11592 pmask_qSetBitVal(parent,LowPx_Present_GetBit(parent),prs);
11593 LowPx_SetAssigned(state);
11594 present_qSetBitVal(state,LowPx_Present_GetBit(state),prs);
11595 state.LowPx = parent.LowPx;
11596 }
11597 // TransactTime signed delta mandatory
11598 if (ok) {
11599 if (!TransactTime_AssignedQ(state)) {
11600 TransactTime_SetAssigned(state);
11601 state.TransactTime = 0;
11602 }
11603 ok = lib_fast::DecodeDeltaSigned(from,state.TransactTime,parent.TransactTime,false);
11604 if (!ok) {
11605 state.error << "emdi12.InstrumentStateChange.TransactTime: bad Signed delta" << eol;
11606 }
11607 state.TransactTime = parent.TransactTime;
11608 }
11609 // TESSecurityStatus type default optional
11610 if (ok) {
11611 bool prs = lib_fast::GetPmapBit(pmap,12);
11612 if (prs) {
11613 prs = !lib_fast::DecodeNull(from);
11614 if (prs) {
11615 ok = lib_fast::DecodeUnsigned(from,parent.TESSecurityStatus.value,true);
11616 if (!ok) {
11617 state.error << "emdi12.InstrumentStateChange.TESSecurityStatus: bad Unsigned" << eol;
11618 }
11619 }
11620 } else {
11621 parent.TESSecurityStatus.value = 0;
11622 prs = true;
11623 }
11624 pmask_qSetBitVal(parent,TESSecurityStatus_Present_GetBit(parent),prs);
11625 }
11626 return ok;
11627}
11628
11629// --- emdi12.InstrumentStateChange..FixEncode
11630void emdi12::InstrumentStateChange_FixEncode(cstring& buf, emdi12::InstrumentStateChange& parent, char soh) {
11631 buf << "35=" << MsgType_Get(parent) << soh;
11632 buf << "34=" << parent.MsgSeqNum << soh;
11633 buf << "49=" << parent.SenderCompID << soh;
11634 buf << "1300=" << parent.MarketSegmentID << soh;
11635 buf << "48=" << parent.SecurityID << soh;
11636 buf << "22=" << SecurityIDSource_Get(parent) << soh;
11637 buf << "965=" << parent.SecurityStatus << soh;
11638 if (SecurityTradingStatus_PresentQ(parent)) {
11639 buf << "326=" << parent.SecurityTradingStatus << soh;
11640 }
11641 buf << "2705=" << parent.MarketCondition << soh;
11642 buf << "2447=" << parent.FastMarketIndicator << soh;
11643 if (SecurityTradingEvent_PresentQ(parent)) {
11644 buf << "1174=" << parent.SecurityTradingEvent << soh;
11645 }
11646 if (SoldOutIndicator_PresentQ(parent)) {
11647 buf << "25155=" << parent.SoldOutIndicator << soh;
11648 }
11649 if (HighPx_PresentQ(parent)) {
11650 buf << "332=" << parent.HighPx << soh;
11651 }
11652 if (LowPx_PresentQ(parent)) {
11653 buf << "333=" << parent.LowPx << soh;
11654 }
11655 buf << "60=" << parent.TransactTime << soh;
11656 if (TESSecurityStatus_PresentQ(parent)) {
11657 buf << "25045=" << parent.TESSecurityStatus << soh;
11658 }
11659}
11660
11661// --- emdi12.MDIncGrp2.MDUpdateAction.ReadStrptrMaybe
11662inline static bool emdi12::MDUpdateAction_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11663 bool retval = true;
11664 retval = emdi12::MDUpdateAction_ReadStrptrMaybe(parent.MDUpdateAction, in_str);
11665 return retval;
11666}
11667
11668// --- emdi12.MDIncGrp2.MDEntryType.ReadStrptrMaybe
11669inline static bool emdi12::MDEntryType_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11670 bool retval = true;
11671 retval = emdi12::MDEntryType_ReadStrptrMaybe(parent.MDEntryType, in_str);
11672 return retval;
11673}
11674
11675// --- emdi12.MDIncGrp2.MDSubBookType.ReadStrptrMaybe
11676inline static bool emdi12::MDSubBookType_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11677 bool retval = true;
11678 retval = emdi12::MDSubBookType_ReadStrptrMaybe(parent.MDSubBookType, in_str);
11679 return retval;
11680}
11681
11682// --- emdi12.MDIncGrp2.SecurityID.ReadStrptrMaybe
11683inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11684 bool retval = true;
11685 retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
11686 return retval;
11687}
11688
11689// --- emdi12.MDIncGrp2.MDEntryPx.ReadStrptrMaybe
11690inline static bool emdi12::MDEntryPx_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11691 bool retval = true;
11692 algo::Decimal MDEntryPx_tmp;
11693 retval = algo::Decimal_ReadStrptrMaybe(MDEntryPx_tmp, in_str);
11694 if (retval) {
11695 MDEntryPx_Set(parent, MDEntryPx_tmp);
11696 }
11697 return retval;
11698}
11699
11700// --- emdi12.MDIncGrp2.MDEntrySize.ReadStrptrMaybe
11701inline static bool emdi12::MDEntrySize_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11702 bool retval = true;
11703 algo::Decimal MDEntrySize_tmp;
11704 retval = algo::Decimal_ReadStrptrMaybe(MDEntrySize_tmp, in_str);
11705 if (retval) {
11706 MDEntrySize_Set(parent, MDEntrySize_tmp);
11707 }
11708 return retval;
11709}
11710
11711// --- emdi12.MDIncGrp2.MDEntryTime.ReadStrptrMaybe
11712inline static bool emdi12::MDEntryTime_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11713 bool retval = true;
11714 i64 MDEntryTime_tmp;
11715 retval = i64_ReadStrptrMaybe(MDEntryTime_tmp, in_str);
11716 if (retval) {
11717 MDEntryTime_Set(parent, MDEntryTime_tmp);
11718 }
11719 return retval;
11720}
11721
11722// --- emdi12.MDIncGrp2.QuoteCondition.ReadStrptrMaybe
11723inline static bool emdi12::QuoteCondition_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11724 bool retval = true;
11725 emdi12::QuoteCondition QuoteCondition_tmp;
11726 retval = emdi12::QuoteCondition_ReadStrptrMaybe(QuoteCondition_tmp, in_str);
11727 if (retval) {
11728 QuoteCondition_Set(parent, QuoteCondition_tmp);
11729 }
11730 return retval;
11731}
11732
11733// --- emdi12.MDIncGrp2.pmask_bitcurs.Next
11734// proceed to next item
11735void emdi12::MDIncGrp2_pmask_bitcurs_Next(MDIncGrp2_pmask_bitcurs &curs) {
11736 ++curs.bit;
11737 int index = curs.bit / 32;
11738 int offset = curs.bit % 32;
11739 for (; index < curs.n_elems; ++index, offset = 0) {
11740 u64 rest = curs.elems[index] >> offset;
11741 if (rest) {
11742 offset += algo::u64_BitScanForward(rest);
11743 break;
11744 }
11745 }
11746 curs.bit = index * 32 + offset;
11747}
11748
11749// --- emdi12.MDIncGrp2..ReadFieldMaybe
11750bool emdi12::MDIncGrp2_ReadFieldMaybe(emdi12::MDIncGrp2& parent, algo::strptr field, algo::strptr strval) {
11751 bool retval = true;
11752 emdi12::FieldId field_id;
11753 (void)value_SetStrptrMaybe(field_id,field);
11754 switch(field_id) {
11755 case emdi12_FieldId_pmask: {
11756 retval = false;
11757 break;
11758 }
11759 case emdi12_FieldId_MDUpdateAction: {
11760 retval = MDUpdateAction_ReadStrptrMaybe(parent, strval);
11761 break;
11762 }
11763 case emdi12_FieldId_MDEntryType: {
11764 retval = MDEntryType_ReadStrptrMaybe(parent, strval);
11765 break;
11766 }
11767 case emdi12_FieldId_MDBookType: {
11768 retval = true;
11769 break;
11770 }
11771 case emdi12_FieldId_MDSubBookType: {
11772 retval = MDSubBookType_ReadStrptrMaybe(parent, strval);
11773 break;
11774 }
11775 case emdi12_FieldId_SecurityID: {
11776 retval = SecurityID_ReadStrptrMaybe(parent, strval);
11777 break;
11778 }
11779 case emdi12_FieldId_SecurityIDSource: {
11780 retval = true;
11781 break;
11782 }
11783 case emdi12_FieldId_MDEntryPx: {
11784 retval = MDEntryPx_ReadStrptrMaybe(parent, strval);
11785 if (retval) {
11786 pmask_qSetBit(parent, 0);
11787 }
11788 break;
11789 }
11790 case emdi12_FieldId_MDEntrySize: {
11791 retval = MDEntrySize_ReadStrptrMaybe(parent, strval);
11792 if (retval) {
11793 pmask_qSetBit(parent, 1);
11794 }
11795 break;
11796 }
11797 case emdi12_FieldId_MDEntryTime: {
11798 retval = MDEntryTime_ReadStrptrMaybe(parent, strval);
11799 if (retval) {
11800 pmask_qSetBit(parent, 2);
11801 }
11802 break;
11803 }
11804 case emdi12_FieldId_QuoteCondition: {
11805 retval = QuoteCondition_ReadStrptrMaybe(parent, strval);
11806 if (retval) {
11807 pmask_qSetBit(parent, 3);
11808 }
11809 break;
11810 }
11811 default: break;
11812 }
11813 if (!retval) {
11814 algo_lib::AppendErrtext("attr",field);
11815 }
11816 return retval;
11817}
11818
11819// --- emdi12.MDIncGrp2..ReadStrptrMaybe
11820// Read fields of emdi12::MDIncGrp2 from an ascii string.
11821// The format of the string is an ssim Tuple
11822bool emdi12::MDIncGrp2_ReadStrptrMaybe(emdi12::MDIncGrp2 &parent, algo::strptr in_str) {
11823 bool retval = true;
11824 retval = algo::StripTypeTag(in_str, "emdi12.MDIncGrp2");
11825 ind_beg(algo::Attr_curs, attr, in_str) {
11826 retval = retval && MDIncGrp2_ReadFieldMaybe(parent, attr.name, attr.value);
11827 }ind_end;
11828 return retval;
11829}
11830
11831// --- emdi12.MDIncGrp2..Init
11832// Set all fields to initial values.
11833void emdi12::MDIncGrp2_Init(emdi12::MDIncGrp2& MDIncGrp2) {
11834 MDIncGrp2.pmask = u32(0);
11835 MDIncGrp2.SecurityID = i64(0);
11836 MDIncGrp2.MDEntryPx = algo::Decimal(algo::Decimal(0,0));
11837 MDIncGrp2.MDEntrySize = algo::Decimal(algo::Decimal(0,0));
11838 MDIncGrp2.MDEntryTime = i64(0);
11839}
11840
11841// --- emdi12.MDIncGrp2..Print
11842// print string representation of ROW to string STR
11843// cfmt:emdi12.MDIncGrp2.String printfmt:Tuple
11844void emdi12::MDIncGrp2_Print(emdi12::MDIncGrp2& row, algo::cstring& str) {
11845 algo::tempstr temp;
11846 str << "emdi12.MDIncGrp2";
11847
11848 emdi12::MDUpdateAction_Print(row.MDUpdateAction, temp);
11849 PrintAttrSpaceReset(str,"MDUpdateAction", temp);
11850
11851 emdi12::MDEntryType_Print(row.MDEntryType, temp);
11852 PrintAttrSpaceReset(str,"MDEntryType", temp);
11853
11854 emdi12::MDBookType_Print(MDBookType_Get(row), temp);
11855 PrintAttrSpaceReset(str,"MDBookType", temp);
11856
11857 emdi12::MDSubBookType_Print(row.MDSubBookType, temp);
11858 PrintAttrSpaceReset(str,"MDSubBookType", temp);
11859
11860 i64_Print(row.SecurityID, temp);
11861 PrintAttrSpaceReset(str,"SecurityID", temp);
11862
11863 algo::strptr_Print(SecurityIDSource_Get(row), temp);
11864 PrintAttrSpaceReset(str,"SecurityIDSource", temp);
11865
11866 if (MDEntryPx_PresentQ(row)) {
11867 algo::Decimal_Print(row.MDEntryPx, temp);
11868 PrintAttrSpaceReset(str,"MDEntryPx", temp);
11869 }
11870
11871 if (MDEntrySize_PresentQ(row)) {
11872 algo::Decimal_Print(row.MDEntrySize, temp);
11873 PrintAttrSpaceReset(str,"MDEntrySize", temp);
11874 }
11875
11876 if (MDEntryTime_PresentQ(row)) {
11877 i64_Print(row.MDEntryTime, temp);
11878 PrintAttrSpaceReset(str,"MDEntryTime", temp);
11879 }
11880
11881 if (QuoteCondition_PresentQ(row)) {
11882 emdi12::QuoteCondition_Print(row.QuoteCondition, temp);
11883 PrintAttrSpaceReset(str,"QuoteCondition", temp);
11884 }
11885}
11886
11887// --- emdi12.MDIncGrp2..FastEncode
11888void emdi12::MDIncGrp2_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MDIncGrp2& parent) {
11889 int index = ary_N(buf);
11890 u64 pmap(0);
11891 // MDUpdateAction type copy mandatory
11892 if (!MDUpdateAction_AssignedQ(state) || parent.MDUpdateAction.value != state.MDUpdateAction.value) {
11893 lib_fast::EncodeUnsigned(buf,parent.MDUpdateAction.value,false);
11894 lib_fast::SetPmapBit(pmap,0);
11895 }
11896 state.MDUpdateAction.value = parent.MDUpdateAction.value;
11897 MDUpdateAction_SetAssigned(state);
11898 // MDEntryType type copy mandatory
11899 if (!MDEntryType_AssignedQ(state) || parent.MDEntryType.value != state.MDEntryType.value) {
11900 lib_fast::EncodeUnsigned(buf,parent.MDEntryType.value,false);
11901 lib_fast::SetPmapBit(pmap,1);
11902 }
11903 state.MDEntryType.value = parent.MDEntryType.value;
11904 MDEntryType_SetAssigned(state);
11905 // MDBookType type constant mandatory
11906 // MDSubBookType type copy mandatory
11907 if (!MDSubBookType_AssignedQ(state) || parent.MDSubBookType.value != state.MDSubBookType.value) {
11908 lib_fast::EncodeUnsigned(buf,parent.MDSubBookType.value,false);
11909 lib_fast::SetPmapBit(pmap,2);
11910 }
11911 state.MDSubBookType.value = parent.MDSubBookType.value;
11912 MDSubBookType_SetAssigned(state);
11913 // SecurityID signed copy mandatory
11914 if (!SecurityID_AssignedQ(state) || parent.SecurityID != state.SecurityID) {
11915 lib_fast::EncodeSigned(buf,parent.SecurityID,false);
11916 lib_fast::SetPmapBit(pmap,3);
11917 }
11918 state.SecurityID = parent.SecurityID;
11919 SecurityID_SetAssigned(state);
11920 // SecurityIDSource string constant mandatory
11921 // MDEntryPx scaled delta optional
11922 if (!MDEntryPx_AssignedQ(state)) {
11923 MDEntryPx_SetAssigned(state);
11924 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
11925 state.MDEntryPx = algo::Decimal(0,0);
11926 }
11927 if (MDEntryPx_PresentQ(parent)) {
11928 if (!MDEntryPx_PresentQ(state)) {
11929 state.MDEntryPx = algo::Decimal(0,0);
11930 }
11931 lib_fast::EncodeDeltaScaled(buf,state.MDEntryPx,parent.MDEntryPx,true);
11932 } else {
11933 lib_fast::EncodeNull(buf);
11934 }
11935 state.MDEntryPx = parent.MDEntryPx;
11936 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),MDEntryPx_PresentQ(parent));
11937 // MDEntrySize scaled delta optional
11938 if (!MDEntrySize_AssignedQ(state)) {
11939 MDEntrySize_SetAssigned(state);
11940 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
11941 state.MDEntrySize = algo::Decimal(0,0);
11942 }
11943 if (MDEntrySize_PresentQ(parent)) {
11944 if (!MDEntrySize_PresentQ(state)) {
11945 state.MDEntrySize = algo::Decimal(0,0);
11946 }
11947 lib_fast::EncodeDeltaScaled(buf,state.MDEntrySize,parent.MDEntrySize,true);
11948 } else {
11949 lib_fast::EncodeNull(buf);
11950 }
11951 state.MDEntrySize = parent.MDEntrySize;
11952 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),MDEntrySize_PresentQ(parent));
11953 // MDEntryTime signed copy optional
11954 if (MDEntryTime_PresentQ(parent)) {
11955 if (!MDEntryTime_AssignedQ(state) || !MDEntryTime_PresentQ(state) || parent.MDEntryTime != state.MDEntryTime ) {
11956 lib_fast::EncodeSigned(buf,parent.MDEntryTime,true);
11957 lib_fast::SetPmapBit(pmap,4);
11958 }
11959 } else {
11960 if (MDEntryTime_AssignedQ(state)) {
11961 lib_fast::EncodeNull(buf);
11962 lib_fast::SetPmapBit(pmap,4);
11963 }
11964 }
11965 state.MDEntryTime = parent.MDEntryTime;
11966 present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),MDEntryTime_PresentQ(parent));
11967 MDEntryTime_SetAssigned(state);
11968 // QuoteCondition type copy optional
11969 if (QuoteCondition_PresentQ(parent)) {
11970 if (!QuoteCondition_AssignedQ(state) || !QuoteCondition_PresentQ(state) || parent.QuoteCondition.value != state.QuoteCondition.value ) {
11971 lib_fast::EncodeUnsigned(buf,parent.QuoteCondition.value,true);
11972 lib_fast::SetPmapBit(pmap,5);
11973 }
11974 } else {
11975 if (QuoteCondition_AssignedQ(state)) {
11976 lib_fast::EncodeNull(buf);
11977 lib_fast::SetPmapBit(pmap,5);
11978 }
11979 }
11980 state.QuoteCondition.value = parent.QuoteCondition.value;
11981 present_qSetBitVal(state,QuoteCondition_Present_GetBit(state),QuoteCondition_PresentQ(parent));
11982 QuoteCondition_SetAssigned(state);
11983 lib_fast::InsertPmap(buf,index,pmap);
11984}
11985
11986// --- emdi12.MDIncGrp2..FastDecode
11987bool emdi12::MDIncGrp2_FastDecode(algo::memptr& from, FastState& state, emdi12::MDIncGrp2& parent) {
11988 bool ok = true;
11989 u64 pmap;
11990 ok = lib_fast::DecodePmap(from,pmap);
11991 if (!ok) {
11992 state.error << "emdi12.MDIncGrp2: bad pmap" << eol;
11993 }
11994 // MDUpdateAction type copy mandatory
11995 if (ok) {
11996 bool prs = lib_fast::GetPmapBit(pmap,0);
11997 if (prs) {
11998 ok = lib_fast::DecodeUnsigned(from,parent.MDUpdateAction.value,false);
11999 if (!ok) {
12000 state.error << "emdi12.MDIncGrp2.MDUpdateAction: bad Unsigned" << eol;
12001 }
12002 } else if (MDUpdateAction_AssignedQ(state)) {
12003 parent.MDUpdateAction.value = state.MDUpdateAction.value;
12004 } else {
12005 ok = false;
12006 state.error << "emdi12.MDIncGrp2.MDUpdateAction: copy operator: previous value unassigned" << eol;
12007 }
12008 MDUpdateAction_SetAssigned(state);
12009 state.MDUpdateAction.value = parent.MDUpdateAction.value;
12010 }
12011 // MDEntryType type copy mandatory
12012 if (ok) {
12013 bool prs = lib_fast::GetPmapBit(pmap,1);
12014 if (prs) {
12015 ok = lib_fast::DecodeUnsigned(from,parent.MDEntryType.value,false);
12016 if (!ok) {
12017 state.error << "emdi12.MDIncGrp2.MDEntryType: bad Unsigned" << eol;
12018 }
12019 } else if (MDEntryType_AssignedQ(state)) {
12020 parent.MDEntryType.value = state.MDEntryType.value;
12021 } else {
12022 ok = false;
12023 state.error << "emdi12.MDIncGrp2.MDEntryType: copy operator: previous value unassigned" << eol;
12024 }
12025 MDEntryType_SetAssigned(state);
12026 state.MDEntryType.value = parent.MDEntryType.value;
12027 }
12028 // MDBookType type constant mandatory
12029 if (ok) {
12030 }
12031 // MDSubBookType type copy mandatory
12032 if (ok) {
12033 bool prs = lib_fast::GetPmapBit(pmap,2);
12034 if (prs) {
12035 ok = lib_fast::DecodeUnsigned(from,parent.MDSubBookType.value,false);
12036 if (!ok) {
12037 state.error << "emdi12.MDIncGrp2.MDSubBookType: bad Unsigned" << eol;
12038 }
12039 } else if (MDSubBookType_AssignedQ(state)) {
12040 parent.MDSubBookType.value = state.MDSubBookType.value;
12041 } else {
12042 ok = false;
12043 state.error << "emdi12.MDIncGrp2.MDSubBookType: copy operator: previous value unassigned" << eol;
12044 }
12045 MDSubBookType_SetAssigned(state);
12046 state.MDSubBookType.value = parent.MDSubBookType.value;
12047 }
12048 // SecurityID signed copy mandatory
12049 if (ok) {
12050 bool prs = lib_fast::GetPmapBit(pmap,3);
12051 if (prs) {
12052 ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
12053 if (!ok) {
12054 state.error << "emdi12.MDIncGrp2.SecurityID: bad Signed" << eol;
12055 }
12056 } else if (SecurityID_AssignedQ(state)) {
12057 parent.SecurityID = state.SecurityID;
12058 } else {
12059 ok = false;
12060 state.error << "emdi12.MDIncGrp2.SecurityID: copy operator: previous value unassigned" << eol;
12061 }
12062 SecurityID_SetAssigned(state);
12063 state.SecurityID = parent.SecurityID;
12064 }
12065 // SecurityIDSource string constant mandatory
12066 if (ok) {
12067 }
12068 // MDEntryPx scaled delta optional
12069 if (ok) {
12070 if (!MDEntryPx_AssignedQ(state)) {
12071 MDEntryPx_SetAssigned(state);
12072 bool prs(true);
12073 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
12074 state.MDEntryPx = algo::Decimal(0,0);
12075 }
12076 bool prs = !lib_fast::DecodeNull(from);
12077 if (prs) {
12078 if (!MDEntryPx_PresentQ(state)) {
12079 state.MDEntryPx = algo::Decimal(0,0);
12080 }
12081 ok = lib_fast::DecodeDeltaScaled(from,state.MDEntryPx,parent.MDEntryPx,true);
12082 if (!ok) {
12083 state.error << "emdi12.MDIncGrp2.MDEntryPx: bad Scaled delta" << eol;
12084 }
12085 state.MDEntryPx = parent.MDEntryPx;
12086 }
12087 pmask_qSetBitVal(parent,MDEntryPx_Present_GetBit(parent),prs);
12088 present_qSetBitVal(state,MDEntryPx_Present_GetBit(state),prs);
12089 }
12090 // MDEntrySize scaled delta optional
12091 if (ok) {
12092 if (!MDEntrySize_AssignedQ(state)) {
12093 MDEntrySize_SetAssigned(state);
12094 bool prs(true);
12095 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
12096 state.MDEntrySize = algo::Decimal(0,0);
12097 }
12098 bool prs = !lib_fast::DecodeNull(from);
12099 if (prs) {
12100 if (!MDEntrySize_PresentQ(state)) {
12101 state.MDEntrySize = algo::Decimal(0,0);
12102 }
12103 ok = lib_fast::DecodeDeltaScaled(from,state.MDEntrySize,parent.MDEntrySize,true);
12104 if (!ok) {
12105 state.error << "emdi12.MDIncGrp2.MDEntrySize: bad Scaled delta" << eol;
12106 }
12107 state.MDEntrySize = parent.MDEntrySize;
12108 }
12109 pmask_qSetBitVal(parent,MDEntrySize_Present_GetBit(parent),prs);
12110 present_qSetBitVal(state,MDEntrySize_Present_GetBit(state),prs);
12111 }
12112 // MDEntryTime signed copy optional
12113 if (ok) {
12114 bool prs = lib_fast::GetPmapBit(pmap,4);
12115 if (prs) {
12116 prs = !lib_fast::DecodeNull(from);
12117 if (prs) {
12118 ok = lib_fast::DecodeSigned(from,parent.MDEntryTime,true);
12119 if (!ok) {
12120 state.error << "emdi12.MDIncGrp2.MDEntryTime: bad Signed" << eol;
12121 }
12122 }
12123 } else if (MDEntryTime_AssignedQ(state)) {
12124 parent.MDEntryTime = state.MDEntryTime;
12125 prs = MDEntryTime_PresentQ(state);
12126 } else {
12127 prs = false;
12128 }
12129 pmask_qSetBitVal(parent,MDEntryTime_Present_GetBit(parent),prs);
12130 MDEntryTime_SetAssigned(state);
12131 present_qSetBitVal(state,MDEntryTime_Present_GetBit(state),prs);
12132 state.MDEntryTime = parent.MDEntryTime;
12133 }
12134 // QuoteCondition type copy optional
12135 if (ok) {
12136 bool prs = lib_fast::GetPmapBit(pmap,5);
12137 if (prs) {
12138 prs = !lib_fast::DecodeNull(from);
12139 if (prs) {
12140 ok = lib_fast::DecodeUnsigned(from,parent.QuoteCondition.value,true);
12141 if (!ok) {
12142 state.error << "emdi12.MDIncGrp2.QuoteCondition: bad Unsigned" << eol;
12143 }
12144 }
12145 } else if (QuoteCondition_AssignedQ(state)) {
12146 parent.QuoteCondition.value = state.QuoteCondition.value;
12147 prs = QuoteCondition_PresentQ(state);
12148 } else {
12149 prs = false;
12150 }
12151 pmask_qSetBitVal(parent,QuoteCondition_Present_GetBit(parent),prs);
12152 QuoteCondition_SetAssigned(state);
12153 present_qSetBitVal(state,QuoteCondition_Present_GetBit(state),prs);
12154 state.QuoteCondition.value = parent.QuoteCondition.value;
12155 }
12156 return ok;
12157}
12158
12159// --- emdi12.MDIncGrp2..FixEncode
12160void emdi12::MDIncGrp2_FixEncode(cstring& buf, emdi12::MDIncGrp2& parent, char soh) {
12161 buf << "279=" << parent.MDUpdateAction << soh;
12162 buf << "269=" << parent.MDEntryType << soh;
12163 buf << "1021=" << MDBookType_Get(parent) << soh;
12164 buf << "1173=" << parent.MDSubBookType << soh;
12165 buf << "48=" << parent.SecurityID << soh;
12166 buf << "22=" << SecurityIDSource_Get(parent) << soh;
12167 if (MDEntryPx_PresentQ(parent)) {
12168 buf << "270=" << parent.MDEntryPx << soh;
12169 }
12170 if (MDEntrySize_PresentQ(parent)) {
12171 buf << "271=" << parent.MDEntrySize << soh;
12172 }
12173 if (MDEntryTime_PresentQ(parent)) {
12174 buf << "273=" << parent.MDEntryTime << soh;
12175 }
12176 if (QuoteCondition_PresentQ(parent)) {
12177 buf << "276=" << parent.QuoteCondition << soh;
12178 }
12179}
12180
12181// --- emdi12.MarketSegmentGrp3..ReadFieldMaybe
12182bool emdi12::MarketSegmentGrp3_ReadFieldMaybe(emdi12::MarketSegmentGrp3& parent, algo::strptr field, algo::strptr strval) {
12183 bool retval = true;
12184 emdi12::FieldId field_id;
12185 (void)value_SetStrptrMaybe(field_id,field);
12186 switch(field_id) {
12187 case emdi12_FieldId_MarketSegmentID: {
12188 retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
12189 break;
12190 }
12191 default: break;
12192 }
12193 if (!retval) {
12194 algo_lib::AppendErrtext("attr",field);
12195 }
12196 return retval;
12197}
12198
12199// --- emdi12.MarketSegmentGrp3..ReadStrptrMaybe
12200// Read fields of emdi12::MarketSegmentGrp3 from an ascii string.
12201// The format of the string is an ssim Tuple
12202bool emdi12::MarketSegmentGrp3_ReadStrptrMaybe(emdi12::MarketSegmentGrp3 &parent, algo::strptr in_str) {
12203 bool retval = true;
12204 retval = algo::StripTypeTag(in_str, "emdi12.MarketSegmentGrp3");
12205 ind_beg(algo::Attr_curs, attr, in_str) {
12206 retval = retval && MarketSegmentGrp3_ReadFieldMaybe(parent, attr.name, attr.value);
12207 }ind_end;
12208 return retval;
12209}
12210
12211// --- emdi12.MarketSegmentGrp3..Print
12212// print string representation of ROW to string STR
12213// cfmt:emdi12.MarketSegmentGrp3.String printfmt:Tuple
12214void emdi12::MarketSegmentGrp3_Print(emdi12::MarketSegmentGrp3& row, algo::cstring& str) {
12215 algo::tempstr temp;
12216 str << "emdi12.MarketSegmentGrp3";
12217
12218 u32_Print(row.MarketSegmentID, temp);
12219 PrintAttrSpaceReset(str,"MarketSegmentID", temp);
12220}
12221
12222// --- emdi12.MarketSegmentGrp3..FastEncode
12223void emdi12::MarketSegmentGrp3_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MarketSegmentGrp3& parent) {
12224 int index = ary_N(buf);
12225 u64 pmap(0);
12226 // MarketSegmentID unsigned copy mandatory
12227 if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
12228 lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
12229 lib_fast::SetPmapBit(pmap,0);
12230 }
12231 state.MarketSegmentID = parent.MarketSegmentID;
12232 MarketSegmentID_SetAssigned(state);
12233 lib_fast::InsertPmap(buf,index,pmap);
12234}
12235
12236// --- emdi12.MarketSegmentGrp3..FastDecode
12237bool emdi12::MarketSegmentGrp3_FastDecode(algo::memptr& from, FastState& state, emdi12::MarketSegmentGrp3& parent) {
12238 bool ok = true;
12239 u64 pmap;
12240 ok = lib_fast::DecodePmap(from,pmap);
12241 if (!ok) {
12242 state.error << "emdi12.MarketSegmentGrp3: bad pmap" << eol;
12243 }
12244 // MarketSegmentID unsigned copy mandatory
12245 if (ok) {
12246 bool prs = lib_fast::GetPmapBit(pmap,0);
12247 if (prs) {
12248 ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
12249 if (!ok) {
12250 state.error << "emdi12.MarketSegmentGrp3.MarketSegmentID: bad Unsigned" << eol;
12251 }
12252 } else if (MarketSegmentID_AssignedQ(state)) {
12253 parent.MarketSegmentID = state.MarketSegmentID;
12254 } else {
12255 ok = false;
12256 state.error << "emdi12.MarketSegmentGrp3.MarketSegmentID: copy operator: previous value unassigned" << eol;
12257 }
12258 MarketSegmentID_SetAssigned(state);
12259 state.MarketSegmentID = parent.MarketSegmentID;
12260 }
12261 return ok;
12262}
12263
12264// --- emdi12.MarketSegmentGrp3..FixEncode
12265void emdi12::MarketSegmentGrp3_FixEncode(cstring& buf, emdi12::MarketSegmentGrp3& parent, char soh) {
12266 buf << "1300=" << parent.MarketSegmentID << soh;
12267}
12268
12269// --- emdi12.SecMassStatGrp.SecurityID.ReadStrptrMaybe
12270inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12271 bool retval = true;
12272 retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
12273 return retval;
12274}
12275
12276// --- emdi12.SecMassStatGrp.SecurityStatus.ReadStrptrMaybe
12277inline static bool emdi12::SecurityStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12278 bool retval = true;
12279 retval = emdi12::SecurityStatus_ReadStrptrMaybe(parent.SecurityStatus, in_str);
12280 return retval;
12281}
12282
12283// --- emdi12.SecMassStatGrp.SecurityTradingStatus.ReadStrptrMaybe
12284inline static bool emdi12::SecurityTradingStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12285 bool retval = true;
12286 emdi12::SecurityTradingStatus SecurityTradingStatus_tmp;
12287 retval = emdi12::SecurityTradingStatus_ReadStrptrMaybe(SecurityTradingStatus_tmp, in_str);
12288 if (retval) {
12289 SecurityTradingStatus_Set(parent, SecurityTradingStatus_tmp);
12290 }
12291 return retval;
12292}
12293
12294// --- emdi12.SecMassStatGrp.MarketCondition.ReadStrptrMaybe
12295inline static bool emdi12::MarketCondition_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12296 bool retval = true;
12297 retval = emdi12::MarketCondition_ReadStrptrMaybe(parent.MarketCondition, in_str);
12298 return retval;
12299}
12300
12301// --- emdi12.SecMassStatGrp.SecurityTradingEvent.ReadStrptrMaybe
12302inline static bool emdi12::SecurityTradingEvent_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12303 bool retval = true;
12304 emdi12::SecurityTradingEvent SecurityTradingEvent_tmp;
12305 retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(SecurityTradingEvent_tmp, in_str);
12306 if (retval) {
12307 SecurityTradingEvent_Set(parent, SecurityTradingEvent_tmp);
12308 }
12309 return retval;
12310}
12311
12312// --- emdi12.SecMassStatGrp.SoldOutIndicator.ReadStrptrMaybe
12313inline static bool emdi12::SoldOutIndicator_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12314 bool retval = true;
12315 emdi12::SoldOutIndicator SoldOutIndicator_tmp;
12316 retval = emdi12::SoldOutIndicator_ReadStrptrMaybe(SoldOutIndicator_tmp, in_str);
12317 if (retval) {
12318 SoldOutIndicator_Set(parent, SoldOutIndicator_tmp);
12319 }
12320 return retval;
12321}
12322
12323// --- emdi12.SecMassStatGrp.HighPx.ReadStrptrMaybe
12324inline static bool emdi12::HighPx_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12325 bool retval = true;
12326 algo::Decimal HighPx_tmp;
12327 retval = algo::Decimal_ReadStrptrMaybe(HighPx_tmp, in_str);
12328 if (retval) {
12329 HighPx_Set(parent, HighPx_tmp);
12330 }
12331 return retval;
12332}
12333
12334// --- emdi12.SecMassStatGrp.LowPx.ReadStrptrMaybe
12335inline static bool emdi12::LowPx_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12336 bool retval = true;
12337 algo::Decimal LowPx_tmp;
12338 retval = algo::Decimal_ReadStrptrMaybe(LowPx_tmp, in_str);
12339 if (retval) {
12340 LowPx_Set(parent, LowPx_tmp);
12341 }
12342 return retval;
12343}
12344
12345// --- emdi12.SecMassStatGrp.TESSecurityStatus.ReadStrptrMaybe
12346inline static bool emdi12::TESSecurityStatus_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12347 bool retval = true;
12348 emdi12::SecurityStatus TESSecurityStatus_tmp;
12349 retval = emdi12::SecurityStatus_ReadStrptrMaybe(TESSecurityStatus_tmp, in_str);
12350 if (retval) {
12351 TESSecurityStatus_Set(parent, TESSecurityStatus_tmp);
12352 }
12353 return retval;
12354}
12355
12356// --- emdi12.SecMassStatGrp.pmask_bitcurs.Next
12357// proceed to next item
12358void emdi12::SecMassStatGrp_pmask_bitcurs_Next(SecMassStatGrp_pmask_bitcurs &curs) {
12359 ++curs.bit;
12360 int index = curs.bit / 32;
12361 int offset = curs.bit % 32;
12362 for (; index < curs.n_elems; ++index, offset = 0) {
12363 u64 rest = curs.elems[index] >> offset;
12364 if (rest) {
12365 offset += algo::u64_BitScanForward(rest);
12366 break;
12367 }
12368 }
12369 curs.bit = index * 32 + offset;
12370}
12371
12372// --- emdi12.SecMassStatGrp..ReadFieldMaybe
12373bool emdi12::SecMassStatGrp_ReadFieldMaybe(emdi12::SecMassStatGrp& parent, algo::strptr field, algo::strptr strval) {
12374 bool retval = true;
12375 emdi12::FieldId field_id;
12376 (void)value_SetStrptrMaybe(field_id,field);
12377 switch(field_id) {
12378 case emdi12_FieldId_pmask: {
12379 retval = false;
12380 break;
12381 }
12382 case emdi12_FieldId_SecurityID: {
12383 retval = SecurityID_ReadStrptrMaybe(parent, strval);
12384 break;
12385 }
12386 case emdi12_FieldId_SecurityIDSource: {
12387 retval = true;
12388 break;
12389 }
12390 case emdi12_FieldId_SecurityStatus: {
12391 retval = SecurityStatus_ReadStrptrMaybe(parent, strval);
12392 break;
12393 }
12394 case emdi12_FieldId_SecurityTradingStatus: {
12395 retval = SecurityTradingStatus_ReadStrptrMaybe(parent, strval);
12396 if (retval) {
12397 pmask_qSetBit(parent, 3);
12398 }
12399 break;
12400 }
12401 case emdi12_FieldId_MarketCondition: {
12402 retval = MarketCondition_ReadStrptrMaybe(parent, strval);
12403 break;
12404 }
12405 case emdi12_FieldId_SecurityTradingEvent: {
12406 retval = SecurityTradingEvent_ReadStrptrMaybe(parent, strval);
12407 if (retval) {
12408 pmask_qSetBit(parent, 2);
12409 }
12410 break;
12411 }
12412 case emdi12_FieldId_SoldOutIndicator: {
12413 retval = SoldOutIndicator_ReadStrptrMaybe(parent, strval);
12414 if (retval) {
12415 pmask_qSetBit(parent, 4);
12416 }
12417 break;
12418 }
12419 case emdi12_FieldId_HighPx: {
12420 retval = HighPx_ReadStrptrMaybe(parent, strval);
12421 if (retval) {
12422 pmask_qSetBit(parent, 0);
12423 }
12424 break;
12425 }
12426 case emdi12_FieldId_LowPx: {
12427 retval = LowPx_ReadStrptrMaybe(parent, strval);
12428 if (retval) {
12429 pmask_qSetBit(parent, 1);
12430 }
12431 break;
12432 }
12433 case emdi12_FieldId_TESSecurityStatus: {
12434 retval = TESSecurityStatus_ReadStrptrMaybe(parent, strval);
12435 if (retval) {
12436 pmask_qSetBit(parent, 5);
12437 }
12438 break;
12439 }
12440 default: break;
12441 }
12442 if (!retval) {
12443 algo_lib::AppendErrtext("attr",field);
12444 }
12445 return retval;
12446}
12447
12448// --- emdi12.SecMassStatGrp..ReadStrptrMaybe
12449// Read fields of emdi12::SecMassStatGrp from an ascii string.
12450// The format of the string is an ssim Tuple
12451bool emdi12::SecMassStatGrp_ReadStrptrMaybe(emdi12::SecMassStatGrp &parent, algo::strptr in_str) {
12452 bool retval = true;
12453 retval = algo::StripTypeTag(in_str, "emdi12.SecMassStatGrp");
12454 ind_beg(algo::Attr_curs, attr, in_str) {
12455 retval = retval && SecMassStatGrp_ReadFieldMaybe(parent, attr.name, attr.value);
12456 }ind_end;
12457 return retval;
12458}
12459
12460// --- emdi12.SecMassStatGrp..Init
12461// Set all fields to initial values.
12462void emdi12::SecMassStatGrp_Init(emdi12::SecMassStatGrp& SecMassStatGrp) {
12463 SecMassStatGrp.pmask = u32(0);
12464 SecMassStatGrp.SecurityID = i64(0);
12465 SecMassStatGrp.SecurityStatus = emdi12_SecurityStatusEnum(0);
12466 SecMassStatGrp.MarketCondition = emdi12_MarketConditionEnum(0);
12467 SecMassStatGrp.HighPx = algo::Decimal(algo::Decimal(0,0));
12468 SecMassStatGrp.LowPx = algo::Decimal(algo::Decimal(0,0));
12469}
12470
12471// --- emdi12.SecMassStatGrp..Print
12472// print string representation of ROW to string STR
12473// cfmt:emdi12.SecMassStatGrp.String printfmt:Tuple
12474void emdi12::SecMassStatGrp_Print(emdi12::SecMassStatGrp& row, algo::cstring& str) {
12475 algo::tempstr temp;
12476 str << "emdi12.SecMassStatGrp";
12477
12478 i64_Print(row.SecurityID, temp);
12479 PrintAttrSpaceReset(str,"SecurityID", temp);
12480
12481 algo::strptr_Print(SecurityIDSource_Get(row), temp);
12482 PrintAttrSpaceReset(str,"SecurityIDSource", temp);
12483
12484 emdi12::SecurityStatus_Print(row.SecurityStatus, temp);
12485 PrintAttrSpaceReset(str,"SecurityStatus", temp);
12486
12487 if (SecurityTradingStatus_PresentQ(row)) {
12488 emdi12::SecurityTradingStatus_Print(row.SecurityTradingStatus, temp);
12489 PrintAttrSpaceReset(str,"SecurityTradingStatus", temp);
12490 }
12491
12492 emdi12::MarketCondition_Print(row.MarketCondition, temp);
12493 PrintAttrSpaceReset(str,"MarketCondition", temp);
12494
12495 if (SecurityTradingEvent_PresentQ(row)) {
12496 emdi12::SecurityTradingEvent_Print(row.SecurityTradingEvent, temp);
12497 PrintAttrSpaceReset(str,"SecurityTradingEvent", temp);
12498 }
12499
12500 if (SoldOutIndicator_PresentQ(row)) {
12501 emdi12::SoldOutIndicator_Print(row.SoldOutIndicator, temp);
12502 PrintAttrSpaceReset(str,"SoldOutIndicator", temp);
12503 }
12504
12505 if (HighPx_PresentQ(row)) {
12506 algo::Decimal_Print(row.HighPx, temp);
12507 PrintAttrSpaceReset(str,"HighPx", temp);
12508 }
12509
12510 if (LowPx_PresentQ(row)) {
12511 algo::Decimal_Print(row.LowPx, temp);
12512 PrintAttrSpaceReset(str,"LowPx", temp);
12513 }
12514
12515 if (TESSecurityStatus_PresentQ(row)) {
12516 emdi12::SecurityStatus_Print(row.TESSecurityStatus, temp);
12517 PrintAttrSpaceReset(str,"TESSecurityStatus", temp);
12518 }
12519}
12520
12521// --- emdi12.SecMassStatGrp..FastEncode
12522void emdi12::SecMassStatGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::SecMassStatGrp& parent) {
12523 int index = ary_N(buf);
12524 u64 pmap(0);
12525 // SecurityID signed none mandatory
12526 lib_fast::EncodeSigned(buf,parent.SecurityID,false);
12527 // SecurityIDSource string constant mandatory
12528 // SecurityStatus type default mandatory
12529 if (parent.SecurityStatus.value != 0) {
12530 lib_fast::EncodeUnsigned(buf,parent.SecurityStatus.value,false);
12531 lib_fast::SetPmapBit(pmap,0);
12532 }
12533 // SecurityTradingStatus type copy optional
12534 if (SecurityTradingStatus_PresentQ(parent)) {
12535 if (!SecurityTradingStatus_AssignedQ(state) || !SecurityTradingStatus_PresentQ(state) || parent.SecurityTradingStatus.value != state.SecurityTradingStatus.value ) {
12536 lib_fast::EncodeUnsigned(buf,parent.SecurityTradingStatus.value,true);
12537 lib_fast::SetPmapBit(pmap,1);
12538 }
12539 } else {
12540 if (SecurityTradingStatus_AssignedQ(state)) {
12541 lib_fast::EncodeNull(buf);
12542 lib_fast::SetPmapBit(pmap,1);
12543 }
12544 }
12545 state.SecurityTradingStatus.value = parent.SecurityTradingStatus.value;
12546 present_qSetBitVal(state,SecurityTradingStatus_Present_GetBit(state),SecurityTradingStatus_PresentQ(parent));
12547 SecurityTradingStatus_SetAssigned(state);
12548 // MarketCondition type default mandatory
12549 if (parent.MarketCondition.value != 0) {
12550 lib_fast::EncodeUnsigned(buf,parent.MarketCondition.value,false);
12551 lib_fast::SetPmapBit(pmap,2);
12552 }
12553 // SecurityTradingEvent type default optional
12554 if (SecurityTradingEvent_PresentQ(parent)) {
12555 lib_fast::EncodeUnsigned(buf,parent.SecurityTradingEvent.value,true);
12556 lib_fast::SetPmapBit(pmap,3);
12557 }
12558 // SoldOutIndicator type default optional
12559 if (SoldOutIndicator_PresentQ(parent)) {
12560 lib_fast::EncodeUnsigned(buf,parent.SoldOutIndicator.value,true);
12561 lib_fast::SetPmapBit(pmap,4);
12562 }
12563 // HighPx scaled none optional
12564 if (HighPx_PresentQ(parent)) {
12565 lib_fast::EncodeScaled(buf,parent.HighPx,true);
12566 } else {
12567 lib_fast::EncodeNull(buf);
12568 }
12569 // LowPx scaled none optional
12570 if (LowPx_PresentQ(parent)) {
12571 lib_fast::EncodeScaled(buf,parent.LowPx,true);
12572 } else {
12573 lib_fast::EncodeNull(buf);
12574 }
12575 // TESSecurityStatus type copy optional
12576 if (TESSecurityStatus_PresentQ(parent)) {
12577 if (!TESSecurityStatus_AssignedQ(state) || !TESSecurityStatus_PresentQ(state) || parent.TESSecurityStatus.value != state.TESSecurityStatus.value ) {
12578 lib_fast::EncodeUnsigned(buf,parent.TESSecurityStatus.value,true);
12579 lib_fast::SetPmapBit(pmap,5);
12580 }
12581 } else {
12582 if (TESSecurityStatus_AssignedQ(state)) {
12583 lib_fast::EncodeNull(buf);
12584 lib_fast::SetPmapBit(pmap,5);
12585 }
12586 }
12587 state.TESSecurityStatus.value = parent.TESSecurityStatus.value;
12588 present_qSetBitVal(state,TESSecurityStatus_Present_GetBit(state),TESSecurityStatus_PresentQ(parent));
12589 TESSecurityStatus_SetAssigned(state);
12590 lib_fast::InsertPmap(buf,index,pmap);
12591}
12592
12593// --- emdi12.SecMassStatGrp..FastDecode
12594bool emdi12::SecMassStatGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::SecMassStatGrp& parent) {
12595 bool ok = true;
12596 u64 pmap;
12597 ok = lib_fast::DecodePmap(from,pmap);
12598 if (!ok) {
12599 state.error << "emdi12.SecMassStatGrp: bad pmap" << eol;
12600 }
12601 // SecurityID signed none mandatory
12602 if (ok) {
12603 ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
12604 if (!ok) {
12605 state.error << "emdi12.SecMassStatGrp.SecurityID: bad Signed" << eol;
12606 }
12607 }
12608 // SecurityIDSource string constant mandatory
12609 if (ok) {
12610 }
12611 // SecurityStatus type default mandatory
12612 if (ok) {
12613 bool prs = lib_fast::GetPmapBit(pmap,0);
12614 if (prs) {
12615 ok = lib_fast::DecodeUnsigned(from,parent.SecurityStatus.value,false);
12616 if (!ok) {
12617 state.error << "emdi12.SecMassStatGrp.SecurityStatus: bad Unsigned" << eol;
12618 }
12619 } else {
12620 parent.SecurityStatus.value = 0;
12621 }
12622 }
12623 // SecurityTradingStatus type copy optional
12624 if (ok) {
12625 bool prs = lib_fast::GetPmapBit(pmap,1);
12626 if (prs) {
12627 prs = !lib_fast::DecodeNull(from);
12628 if (prs) {
12629 ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingStatus.value,true);
12630 if (!ok) {
12631 state.error << "emdi12.SecMassStatGrp.SecurityTradingStatus: bad Unsigned" << eol;
12632 }
12633 }
12634 } else if (SecurityTradingStatus_AssignedQ(state)) {
12635 parent.SecurityTradingStatus.value = state.SecurityTradingStatus.value;
12636 prs = SecurityTradingStatus_PresentQ(state);
12637 } else {
12638 prs = false;
12639 }
12640 pmask_qSetBitVal(parent,SecurityTradingStatus_Present_GetBit(parent),prs);
12641 SecurityTradingStatus_SetAssigned(state);
12642 present_qSetBitVal(state,SecurityTradingStatus_Present_GetBit(state),prs);
12643 state.SecurityTradingStatus.value = parent.SecurityTradingStatus.value;
12644 }
12645 // MarketCondition type default mandatory
12646 if (ok) {
12647 bool prs = lib_fast::GetPmapBit(pmap,2);
12648 if (prs) {
12649 ok = lib_fast::DecodeUnsigned(from,parent.MarketCondition.value,false);
12650 if (!ok) {
12651 state.error << "emdi12.SecMassStatGrp.MarketCondition: bad Unsigned" << eol;
12652 }
12653 } else {
12654 parent.MarketCondition.value = 0;
12655 }
12656 }
12657 // SecurityTradingEvent type default optional
12658 if (ok) {
12659 bool prs = lib_fast::GetPmapBit(pmap,3);
12660 if (prs) {
12661 prs = !lib_fast::DecodeNull(from);
12662 if (prs) {
12663 ok = lib_fast::DecodeUnsigned(from,parent.SecurityTradingEvent.value,true);
12664 if (!ok) {
12665 state.error << "emdi12.SecMassStatGrp.SecurityTradingEvent: bad Unsigned" << eol;
12666 }
12667 }
12668 } else {
12669 }
12670 pmask_qSetBitVal(parent,SecurityTradingEvent_Present_GetBit(parent),prs);
12671 }
12672 // SoldOutIndicator type default optional
12673 if (ok) {
12674 bool prs = lib_fast::GetPmapBit(pmap,4);
12675 if (prs) {
12676 prs = !lib_fast::DecodeNull(from);
12677 if (prs) {
12678 ok = lib_fast::DecodeUnsigned(from,parent.SoldOutIndicator.value,true);
12679 if (!ok) {
12680 state.error << "emdi12.SecMassStatGrp.SoldOutIndicator: bad Unsigned" << eol;
12681 }
12682 }
12683 } else {
12684 }
12685 pmask_qSetBitVal(parent,SoldOutIndicator_Present_GetBit(parent),prs);
12686 }
12687 // HighPx scaled none optional
12688 if (ok) {
12689 bool prs = !lib_fast::DecodeNull(from);
12690 if (prs) {
12691 ok = lib_fast::DecodeScaled(from,parent.HighPx,true);
12692 if (!ok) {
12693 state.error << "emdi12.SecMassStatGrp.HighPx: bad Scaled" << eol;
12694 }
12695 }
12696 pmask_qSetBitVal(parent,HighPx_Present_GetBit(parent),prs);
12697 }
12698 // LowPx scaled none optional
12699 if (ok) {
12700 bool prs = !lib_fast::DecodeNull(from);
12701 if (prs) {
12702 ok = lib_fast::DecodeScaled(from,parent.LowPx,true);
12703 if (!ok) {
12704 state.error << "emdi12.SecMassStatGrp.LowPx: bad Scaled" << eol;
12705 }
12706 }
12707 pmask_qSetBitVal(parent,LowPx_Present_GetBit(parent),prs);
12708 }
12709 // TESSecurityStatus type copy optional
12710 if (ok) {
12711 bool prs = lib_fast::GetPmapBit(pmap,5);
12712 if (prs) {
12713 prs = !lib_fast::DecodeNull(from);
12714 if (prs) {
12715 ok = lib_fast::DecodeUnsigned(from,parent.TESSecurityStatus.value,true);
12716 if (!ok) {
12717 state.error << "emdi12.SecMassStatGrp.TESSecurityStatus: bad Unsigned" << eol;
12718 }
12719 }
12720 } else if (TESSecurityStatus_AssignedQ(state)) {
12721 parent.TESSecurityStatus.value = state.TESSecurityStatus.value;
12722 prs = TESSecurityStatus_PresentQ(state);
12723 } else {
12724 prs = false;
12725 }
12726 pmask_qSetBitVal(parent,TESSecurityStatus_Present_GetBit(parent),prs);
12727 TESSecurityStatus_SetAssigned(state);
12728 present_qSetBitVal(state,TESSecurityStatus_Present_GetBit(state),prs);
12729 state.TESSecurityStatus.value = parent.TESSecurityStatus.value;
12730 }
12731 return ok;
12732}
12733
12734// --- emdi12.SecMassStatGrp..FixEncode
12735void emdi12::SecMassStatGrp_FixEncode(cstring& buf, emdi12::SecMassStatGrp& parent, char soh) {
12736 buf << "48=" << parent.SecurityID << soh;
12737 buf << "22=" << SecurityIDSource_Get(parent) << soh;
12738 buf << "965=" << parent.SecurityStatus << soh;
12739 if (SecurityTradingStatus_PresentQ(parent)) {
12740 buf << "326=" << parent.SecurityTradingStatus << soh;
12741 }
12742 buf << "2705=" << parent.MarketCondition << soh;
12743 if (SecurityTradingEvent_PresentQ(parent)) {
12744 buf << "1174=" << parent.SecurityTradingEvent << soh;
12745 }
12746 if (SoldOutIndicator_PresentQ(parent)) {
12747 buf << "25155=" << parent.SoldOutIndicator << soh;
12748 }
12749 if (HighPx_PresentQ(parent)) {
12750 buf << "332=" << parent.HighPx << soh;
12751 }
12752 if (LowPx_PresentQ(parent)) {
12753 buf << "333=" << parent.LowPx << soh;
12754 }
12755 if (TESSecurityStatus_PresentQ(parent)) {
12756 buf << "25045=" << parent.TESSecurityStatus << soh;
12757 }
12758}
12759
12760// --- emdi12.MassInstrumentStateChange.base.CopyOut
12761// Copy fields out of row
12762void emdi12::parent_CopyOut(emdi12::MassInstrumentStateChange &row, emdi12::TemplateHeader &out) {
12763 // length: field value is computed
12764 // id: field value is computed
12765 (void)row;//only to avoid -Wunused-parameter
12766 (void)out;//only to avoid -Wunused-parameter
12767}
12768
12769// --- emdi12.MassInstrumentStateChange.MsgSeqNum.ReadStrptrMaybe
12770inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12771 bool retval = true;
12772 retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
12773 return retval;
12774}
12775
12776// --- emdi12.MassInstrumentStateChange.SenderCompID.ReadStrptrMaybe
12777inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12778 bool retval = true;
12779 retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
12780 return retval;
12781}
12782
12783// --- emdi12.MassInstrumentStateChange.MarketSegmentID.ReadStrptrMaybe
12784inline static bool emdi12::MarketSegmentID_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12785 bool retval = true;
12786 retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, in_str);
12787 return retval;
12788}
12789
12790// --- emdi12.MassInstrumentStateChange.InstrumentScopeProductComplex.ReadStrptrMaybe
12791inline static bool emdi12::InstrumentScopeProductComplex_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12792 bool retval = true;
12793 retval = emdi12::ProductComplex_ReadStrptrMaybe(parent.InstrumentScopeProductComplex, in_str);
12794 return retval;
12795}
12796
12797// --- emdi12.MassInstrumentStateChange.SecurityMassStatus.ReadStrptrMaybe
12798inline static bool emdi12::SecurityMassStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12799 bool retval = true;
12800 retval = emdi12::SecurityStatus_ReadStrptrMaybe(parent.SecurityMassStatus, in_str);
12801 return retval;
12802}
12803
12804// --- emdi12.MassInstrumentStateChange.SecurityMassTradingStatus.ReadStrptrMaybe
12805inline static bool emdi12::SecurityMassTradingStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12806 bool retval = true;
12807 emdi12::SecurityTradingStatus SecurityMassTradingStatus_tmp;
12808 retval = emdi12::SecurityTradingStatus_ReadStrptrMaybe(SecurityMassTradingStatus_tmp, in_str);
12809 if (retval) {
12810 SecurityMassTradingStatus_Set(parent, SecurityMassTradingStatus_tmp);
12811 }
12812 return retval;
12813}
12814
12815// --- emdi12.MassInstrumentStateChange.MassMarketCondition.ReadStrptrMaybe
12816inline static bool emdi12::MassMarketCondition_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12817 bool retval = true;
12818 retval = emdi12::MarketCondition_ReadStrptrMaybe(parent.MassMarketCondition, in_str);
12819 return retval;
12820}
12821
12822// --- emdi12.MassInstrumentStateChange.FastMarketIndicator.ReadStrptrMaybe
12823inline static bool emdi12::FastMarketIndicator_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12824 bool retval = true;
12825 retval = emdi12::FastMarketIndicator_ReadStrptrMaybe(parent.FastMarketIndicator, in_str);
12826 return retval;
12827}
12828
12829// --- emdi12.MassInstrumentStateChange.SecurityMassTradingEvent.ReadStrptrMaybe
12830inline static bool emdi12::SecurityMassTradingEvent_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12831 bool retval = true;
12832 emdi12::SecurityTradingEvent SecurityMassTradingEvent_tmp;
12833 retval = emdi12::SecurityTradingEvent_ReadStrptrMaybe(SecurityMassTradingEvent_tmp, in_str);
12834 if (retval) {
12835 SecurityMassTradingEvent_Set(parent, SecurityMassTradingEvent_tmp);
12836 }
12837 return retval;
12838}
12839
12840// --- emdi12.MassInstrumentStateChange.MassSoldOutIndicator.ReadStrptrMaybe
12841inline static bool emdi12::MassSoldOutIndicator_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12842 bool retval = true;
12843 emdi12::SoldOutIndicator MassSoldOutIndicator_tmp;
12844 retval = emdi12::SoldOutIndicator_ReadStrptrMaybe(MassSoldOutIndicator_tmp, in_str);
12845 if (retval) {
12846 MassSoldOutIndicator_Set(parent, MassSoldOutIndicator_tmp);
12847 }
12848 return retval;
12849}
12850
12851// --- emdi12.MassInstrumentStateChange.TransactTime.ReadStrptrMaybe
12852inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12853 bool retval = true;
12854 retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
12855 return retval;
12856}
12857
12858// --- emdi12.MassInstrumentStateChange.TESSecurityMassStatus.ReadStrptrMaybe
12859inline static bool emdi12::TESSecurityMassStatus_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12860 bool retval = true;
12861 emdi12::SecurityStatus TESSecurityMassStatus_tmp;
12862 retval = emdi12::SecurityStatus_ReadStrptrMaybe(TESSecurityMassStatus_tmp, in_str);
12863 if (retval) {
12864 TESSecurityMassStatus_Set(parent, TESSecurityMassStatus_tmp);
12865 }
12866 return retval;
12867}
12868
12869// --- emdi12.MassInstrumentStateChange.LastFragment.ReadStrptrMaybe
12870inline static bool emdi12::LastFragment_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
12871 bool retval = true;
12872 retval = emdi12::LastFragment_ReadStrptrMaybe(parent.LastFragment, in_str);
12873 return retval;
12874}
12875
12876// --- emdi12.MassInstrumentStateChange.SecMassStatGrp.Getary
12877// Access var-length portion as an aryptr. Length is determined from one of the fields.
12878algo::aryptr<emdi12::SecMassStatGrp> emdi12::SecMassStatGrp_Getary(emdi12::MassInstrumentStateChange& parent) {
12879 return algo::aryptr<emdi12::SecMassStatGrp>(SecMassStatGrp_Addr(parent), SecMassStatGrp_N(parent));
12880}
12881
12882// --- emdi12.MassInstrumentStateChange.SecMassStatGrp.Addr
12883emdi12::SecMassStatGrp* emdi12::SecMassStatGrp_Addr(emdi12::MassInstrumentStateChange& parent) {
12884 return (emdi12::SecMassStatGrp*)((u8*)&parent + sizeof(emdi12::MassInstrumentStateChange)); // address of varlen portion
12885}
12886
12887// --- emdi12.MassInstrumentStateChange.SecMassStatGrp.ReadStrptrMaybe
12888// Convert string to field. Return success value
12889bool emdi12::SecMassStatGrp_ReadStrptrMaybe(emdi12::MassInstrumentStateChange& parent, algo::strptr in_str) {
12890 bool retval = true;
12891 if (algo_lib::_db.varlenbuf) {
12892 emdi12::SecMassStatGrp *SecMassStatGrp_tmp = new(ary_AllocN(*algo_lib::_db.varlenbuf, sizeof(emdi12::SecMassStatGrp)).elems) emdi12::SecMassStatGrp;
12893 retval = emdi12::SecMassStatGrp_ReadStrptrMaybe(*SecMassStatGrp_tmp, in_str);
12894 }
12895 (void)parent;//only to avoid -Wunused-parameter
12896 return retval;
12897}
12898
12899// --- emdi12.MassInstrumentStateChange.pmask_bitcurs.Next
12900// proceed to next item
12901void emdi12::MassInstrumentStateChange_pmask_bitcurs_Next(MassInstrumentStateChange_pmask_bitcurs &curs) {
12902 ++curs.bit;
12903 int index = curs.bit / 32;
12904 int offset = curs.bit % 32;
12905 for (; index < curs.n_elems; ++index, offset = 0) {
12906 u64 rest = curs.elems[index] >> offset;
12907 if (rest) {
12908 offset += algo::u64_BitScanForward(rest);
12909 break;
12910 }
12911 }
12912 curs.bit = index * 32 + offset;
12913}
12914
12915// --- emdi12.MassInstrumentStateChange..ReadFieldMaybe
12916bool emdi12::MassInstrumentStateChange_ReadFieldMaybe(emdi12::MassInstrumentStateChange& parent, algo::strptr field, algo::strptr strval) {
12917 bool retval = true;
12918 emdi12::FieldId field_id;
12919 (void)value_SetStrptrMaybe(field_id,algo::Pathcomp(field, ".LL"));
12920 switch(field_id) {
12921 case emdi12_FieldId_base: {
12922 retval = false;
12923 break;
12924 }
12925 case emdi12_FieldId_length: {
12926 retval = false;
12927 break;
12928 }
12929 case emdi12_FieldId_id: {
12930 retval = false;
12931 break;
12932 }
12933 case emdi12_FieldId_pmask: {
12934 retval = false;
12935 break;
12936 }
12937 case emdi12_FieldId_MsgType: {
12938 retval = true;
12939 break;
12940 }
12941 case emdi12_FieldId_MsgSeqNum: {
12942 retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
12943 break;
12944 }
12945 case emdi12_FieldId_SenderCompID: {
12946 retval = SenderCompID_ReadStrptrMaybe(parent, strval);
12947 break;
12948 }
12949 case emdi12_FieldId_MarketSegmentID: {
12950 retval = MarketSegmentID_ReadStrptrMaybe(parent, strval);
12951 break;
12952 }
12953 case emdi12_FieldId_InstrumentScopeProductComplex: {
12954 retval = InstrumentScopeProductComplex_ReadStrptrMaybe(parent, strval);
12955 break;
12956 }
12957 case emdi12_FieldId_SecurityMassStatus: {
12958 retval = SecurityMassStatus_ReadStrptrMaybe(parent, strval);
12959 break;
12960 }
12961 case emdi12_FieldId_SecurityMassTradingStatus: {
12962 retval = SecurityMassTradingStatus_ReadStrptrMaybe(parent, strval);
12963 if (retval) {
12964 pmask_qSetBit(parent, 2);
12965 }
12966 break;
12967 }
12968 case emdi12_FieldId_MassMarketCondition: {
12969 retval = MassMarketCondition_ReadStrptrMaybe(parent, strval);
12970 break;
12971 }
12972 case emdi12_FieldId_FastMarketIndicator: {
12973 retval = FastMarketIndicator_ReadStrptrMaybe(parent, strval);
12974 break;
12975 }
12976 case emdi12_FieldId_SecurityMassTradingEvent: {
12977 retval = SecurityMassTradingEvent_ReadStrptrMaybe(parent, strval);
12978 if (retval) {
12979 pmask_qSetBit(parent, 1);
12980 }
12981 break;
12982 }
12983 case emdi12_FieldId_MassSoldOutIndicator: {
12984 retval = MassSoldOutIndicator_ReadStrptrMaybe(parent, strval);
12985 if (retval) {
12986 pmask_qSetBit(parent, 0);
12987 }
12988 break;
12989 }
12990 case emdi12_FieldId_TransactTime: {
12991 retval = TransactTime_ReadStrptrMaybe(parent, strval);
12992 break;
12993 }
12994 case emdi12_FieldId_TESSecurityMassStatus: {
12995 retval = TESSecurityMassStatus_ReadStrptrMaybe(parent, strval);
12996 if (retval) {
12997 pmask_qSetBit(parent, 3);
12998 }
12999 break;
13000 }
13001 case emdi12_FieldId_LastFragment: {
13002 retval = LastFragment_ReadStrptrMaybe(parent, strval);
13003 break;
13004 }
13005 case emdi12_FieldId_SecMassStatGrp: {
13006 retval = SecMassStatGrp_ReadStrptrMaybe(parent, strval);
13007 break;
13008 }
13009 default: break;
13010 }
13011 if (!retval) {
13012 algo_lib::AppendErrtext("attr",field);
13013 }
13014 return retval;
13015}
13016
13017// --- emdi12.MassInstrumentStateChange..ReadStrptrMaybe
13018// Any varlen fields are returned in algo_lib::_db.varlenbuf if set
13019// Read fields of emdi12::MassInstrumentStateChange from an ascii string.
13020// The format of the string is an ssim Tuple
13021bool emdi12::MassInstrumentStateChange_ReadStrptrMaybe(emdi12::MassInstrumentStateChange &parent, algo::strptr in_str) {
13022 bool retval = true;
13023 retval = algo::StripTypeTag(in_str, "emdi12.MassInstrumentStateChange");
13024 ind_beg(algo::Attr_curs, attr, in_str) {
13025 retval = retval && MassInstrumentStateChange_ReadFieldMaybe(parent, attr.name, attr.value);
13026 }ind_end;
13027 return retval;
13028}
13029
13030// --- emdi12.MassInstrumentStateChange..Init
13031// Set all fields to initial values.
13032void emdi12::MassInstrumentStateChange_Init(emdi12::MassInstrumentStateChange& parent) {
13033 parent.length = u32(ssizeof(parent) + (0));
13034 parent.id = u32(99);
13035 parent.pmask = u32(0);
13036 parent.MsgSeqNum = u32(0);
13037 parent.SenderCompID = u32(0);
13038 parent.MarketSegmentID = u32(0);
13039 parent.SecurityMassStatus = emdi12_SecurityStatusEnum(0);
13040 parent.MassMarketCondition = emdi12_MarketConditionEnum(0);
13041 parent.FastMarketIndicator = emdi12_FastMarketIndicatorEnum(0);
13042 parent.TransactTime = i64(0);
13043 parent.TESSecurityMassStatus = emdi12_SecurityStatusEnum(0);
13044 parent.LastFragment = emdi12_LastFragmentEnum(1);
13045}
13046
13047// --- emdi12.MassInstrumentStateChange..Print
13048// print string representation of ROW to string STR
13049// cfmt:emdi12.MassInstrumentStateChange.String printfmt:Tuple
13050void emdi12::MassInstrumentStateChange_Print(emdi12::MassInstrumentStateChange& row, algo::cstring& str) {
13051 algo::tempstr temp;
13052 str << "emdi12.MassInstrumentStateChange";
13053
13054 algo::strptr_Print(MsgType_Get(row), temp);
13055 PrintAttrSpaceReset(str,"MsgType", temp);
13056
13057 u32_Print(row.MsgSeqNum, temp);
13058 PrintAttrSpaceReset(str,"MsgSeqNum", temp);
13059
13060 u32_Print(row.SenderCompID, temp);
13061 PrintAttrSpaceReset(str,"SenderCompID", temp);
13062
13063 u32_Print(row.MarketSegmentID, temp);
13064 PrintAttrSpaceReset(str,"MarketSegmentID", temp);
13065
13066 emdi12::ProductComplex_Print(row.InstrumentScopeProductComplex, temp);
13067 PrintAttrSpaceReset(str,"InstrumentScopeProductComplex", temp);
13068
13069 emdi12::SecurityStatus_Print(row.SecurityMassStatus, temp);
13070 PrintAttrSpaceReset(str,"SecurityMassStatus", temp);
13071
13072 if (SecurityMassTradingStatus_PresentQ(row)) {
13073 emdi12::SecurityTradingStatus_Print(row.SecurityMassTradingStatus, temp);
13074 PrintAttrSpaceReset(str,"SecurityMassTradingStatus", temp);
13075 }
13076
13077 emdi12::MarketCondition_Print(row.MassMarketCondition, temp);
13078 PrintAttrSpaceReset(str,"MassMarketCondition", temp);
13079
13080 emdi12::FastMarketIndicator_Print(row.FastMarketIndicator, temp);
13081 PrintAttrSpaceReset(str,"FastMarketIndicator", temp);
13082
13083 if (SecurityMassTradingEvent_PresentQ(row)) {
13084 emdi12::SecurityTradingEvent_Print(row.SecurityMassTradingEvent, temp);
13085 PrintAttrSpaceReset(str,"SecurityMassTradingEvent", temp);
13086 }
13087
13088 if (MassSoldOutIndicator_PresentQ(row)) {
13089 emdi12::SoldOutIndicator_Print(row.MassSoldOutIndicator, temp);
13090 PrintAttrSpaceReset(str,"MassSoldOutIndicator", temp);
13091 }
13092
13093 i64_Print(row.TransactTime, temp);
13094 PrintAttrSpaceReset(str,"TransactTime", temp);
13095
13096 if (TESSecurityMassStatus_PresentQ(row)) {
13097 emdi12::SecurityStatus_Print(row.TESSecurityMassStatus, temp);
13098 PrintAttrSpaceReset(str,"TESSecurityMassStatus", temp);
13099 }
13100
13101 emdi12::LastFragment_Print(row.LastFragment, temp);
13102 PrintAttrSpaceReset(str,"LastFragment", temp);
13103
13104 ind_beg(MassInstrumentStateChange_SecMassStatGrp_curs,SecMassStatGrp,row) {
13105 emdi12::SecMassStatGrp_Print(SecMassStatGrp, temp);
13106 tempstr name;
13107 name << "SecMassStatGrp.";
13108 name << ind_curs(SecMassStatGrp).index;
13109 PrintAttrSpaceReset(str, name, temp);
13110 }ind_end;
13111}
13112
13113// --- emdi12.MassInstrumentStateChange..FastEncode
13114void emdi12::MassInstrumentStateChange_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::MassInstrumentStateChange& parent) {
13115 int index = ary_N(buf);
13116 u64 pmap(0);
13117 if (!tid_AssignedQ(state) || parent.id != state.tid) {
13118 lib_fast::EncodeUnsigned(buf,parent.id,false);
13119 lib_fast::SetPmapBit(pmap,0);
13120 }
13121 tid_SetAssigned(state);
13122 state.tid = parent.id;
13123 // MsgType string constant mandatory
13124 // MsgSeqNum unsigned increment mandatory
13125 if (MsgSeqNum_AssignedQ(state)) {
13126 if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
13127 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
13128 lib_fast::SetPmapBit(pmap,1);
13129 }
13130 } else {
13131 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
13132 lib_fast::SetPmapBit(pmap,1);
13133 }
13134 state.MsgSeqNum = parent.MsgSeqNum;
13135 MsgSeqNum_SetAssigned(state);
13136 // SenderCompID unsigned copy mandatory
13137 if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
13138 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
13139 lib_fast::SetPmapBit(pmap,2);
13140 }
13141 state.SenderCompID = parent.SenderCompID;
13142 SenderCompID_SetAssigned(state);
13143 // MarketSegmentID unsigned copy mandatory
13144 if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
13145 lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
13146 lib_fast::SetPmapBit(pmap,3);
13147 }
13148 state.MarketSegmentID = parent.MarketSegmentID;
13149 MarketSegmentID_SetAssigned(state);
13150 // InstrumentScopeProductComplex type copy mandatory
13151 if (!InstrumentScopeProductComplex_AssignedQ(state) || parent.InstrumentScopeProductComplex.value != state.InstrumentScopeProductComplex.value) {
13152 lib_fast::EncodeUnsigned(buf,parent.InstrumentScopeProductComplex.value,false);
13153 lib_fast::SetPmapBit(pmap,4);
13154 }
13155 state.InstrumentScopeProductComplex.value = parent.InstrumentScopeProductComplex.value;
13156 InstrumentScopeProductComplex_SetAssigned(state);
13157 // SecurityMassStatus type default mandatory
13158 if (parent.SecurityMassStatus.value != 0) {
13159 lib_fast::EncodeUnsigned(buf,parent.SecurityMassStatus.value,false);
13160 lib_fast::SetPmapBit(pmap,5);
13161 }
13162 // SecurityMassTradingStatus type copy optional
13163 if (SecurityMassTradingStatus_PresentQ(parent)) {
13164 if (!SecurityMassTradingStatus_AssignedQ(state) || !SecurityMassTradingStatus_PresentQ(state) || parent.SecurityMassTradingStatus.value != state.SecurityMassTradingStatus.value ) {
13165 lib_fast::EncodeUnsigned(buf,parent.SecurityMassTradingStatus.value,true);
13166 lib_fast::SetPmapBit(pmap,6);
13167 }
13168 } else {
13169 if (SecurityMassTradingStatus_AssignedQ(state)) {
13170 lib_fast::EncodeNull(buf);
13171 lib_fast::SetPmapBit(pmap,6);
13172 }
13173 }
13174 state.SecurityMassTradingStatus.value = parent.SecurityMassTradingStatus.value;
13175 present_qSetBitVal(state,SecurityMassTradingStatus_Present_GetBit(state),SecurityMassTradingStatus_PresentQ(parent));
13176 SecurityMassTradingStatus_SetAssigned(state);
13177 // MassMarketCondition type default mandatory
13178 if (parent.MassMarketCondition.value != 0) {
13179 lib_fast::EncodeUnsigned(buf,parent.MassMarketCondition.value,false);
13180 lib_fast::SetPmapBit(pmap,7);
13181 }
13182 // FastMarketIndicator type default mandatory
13183 if (parent.FastMarketIndicator.value != 0) {
13184 lib_fast::EncodeUnsigned(buf,parent.FastMarketIndicator.value,false);
13185 lib_fast::SetPmapBit(pmap,8);
13186 }
13187 // SecurityMassTradingEvent type default optional
13188 if (SecurityMassTradingEvent_PresentQ(parent)) {
13189 lib_fast::EncodeUnsigned(buf,parent.SecurityMassTradingEvent.value,true);
13190 lib_fast::SetPmapBit(pmap,9);
13191 }
13192 // MassSoldOutIndicator type default optional
13193 if (MassSoldOutIndicator_PresentQ(parent)) {
13194 lib_fast::EncodeUnsigned(buf,parent.MassSoldOutIndicator.value,true);
13195 lib_fast::SetPmapBit(pmap,10);
13196 }
13197 // TransactTime signed delta mandatory
13198 if (!TransactTime_AssignedQ(state)) {
13199 TransactTime_SetAssigned(state);
13200 state.TransactTime = 0;
13201 }
13202 lib_fast::EncodeDeltaSigned(buf,state.TransactTime,parent.TransactTime,false);
13203 state.TransactTime = parent.TransactTime;
13204 // TESSecurityMassStatus type default optional
13205 if (TESSecurityMassStatus_PresentQ(parent)) {
13206 if (parent.TESSecurityMassStatus.value != 0) {
13207 lib_fast::EncodeUnsigned(buf,parent.TESSecurityMassStatus.value,true);
13208 lib_fast::SetPmapBit(pmap,11);
13209 }
13210 } else {
13211 lib_fast::EncodeNull(buf);
13212 lib_fast::SetPmapBit(pmap,11);
13213 }
13214 // SecMassStatGrp sequence none mandatory
13215 {
13216 u32 length = SecMassStatGrp_N(parent);
13217 if (length != 0) {
13218 lib_fast::EncodeUnsigned(buf,length,false);
13219 lib_fast::SetPmapBit(pmap,12);
13220 }
13221 ind_beg(MassInstrumentStateChange_SecMassStatGrp_curs,elem,parent) {
13222 SecMassStatGrp_FastEncode(buf,state,elem);
13223 }ind_end;
13224 }
13225 // LastFragment type default mandatory
13226 if (parent.LastFragment.value != 1) {
13227 lib_fast::EncodeUnsigned(buf,parent.LastFragment.value,false);
13228 lib_fast::SetPmapBit(pmap,13);
13229 }
13230 lib_fast::InsertPmap(buf,index,pmap);
13231}
13232
13233// --- emdi12.MassInstrumentStateChange..FastDecode
13234bool emdi12::MassInstrumentStateChange_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::MassInstrumentStateChange& parent) {
13235 bool ok = true;
13236 // MsgType string constant mandatory
13237 if (ok) {
13238 }
13239 // MsgSeqNum unsigned increment mandatory
13240 if (ok) {
13241 bool prs = lib_fast::GetPmapBit(pmap,1);
13242 if (prs) {
13243 ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
13244 if (!ok) {
13245 state.error << "emdi12.MassInstrumentStateChange.MsgSeqNum: bad Unsigned" << eol;
13246 }
13247 } else if (MsgSeqNum_AssignedQ(state)) {
13248 parent.MsgSeqNum = state.MsgSeqNum + 1;
13249 } else {
13250 ok = false;
13251 state.error << "emdi12.MassInstrumentStateChange.MsgSeqNum: increment operator: previous value unassigned" << eol;
13252 }
13253 MsgSeqNum_SetAssigned(state);
13254 state.MsgSeqNum = parent.MsgSeqNum;
13255 }
13256 // SenderCompID unsigned copy mandatory
13257 if (ok) {
13258 bool prs = lib_fast::GetPmapBit(pmap,2);
13259 if (prs) {
13260 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
13261 if (!ok) {
13262 state.error << "emdi12.MassInstrumentStateChange.SenderCompID: bad Unsigned" << eol;
13263 }
13264 } else if (SenderCompID_AssignedQ(state)) {
13265 parent.SenderCompID = state.SenderCompID;
13266 } else {
13267 ok = false;
13268 state.error << "emdi12.MassInstrumentStateChange.SenderCompID: copy operator: previous value unassigned" << eol;
13269 }
13270 SenderCompID_SetAssigned(state);
13271 state.SenderCompID = parent.SenderCompID;
13272 }
13273 // MarketSegmentID unsigned copy mandatory
13274 if (ok) {
13275 bool prs = lib_fast::GetPmapBit(pmap,3);
13276 if (prs) {
13277 ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
13278 if (!ok) {
13279 state.error << "emdi12.MassInstrumentStateChange.MarketSegmentID: bad Unsigned" << eol;
13280 }
13281 } else if (MarketSegmentID_AssignedQ(state)) {
13282 parent.MarketSegmentID = state.MarketSegmentID;
13283 } else {
13284 ok = false;
13285 state.error << "emdi12.MassInstrumentStateChange.MarketSegmentID: copy operator: previous value unassigned" << eol;
13286 }
13287 MarketSegmentID_SetAssigned(state);
13288 state.MarketSegmentID = parent.MarketSegmentID;
13289 }
13290 // InstrumentScopeProductComplex type copy mandatory
13291 if (ok) {
13292 bool prs = lib_fast::GetPmapBit(pmap,4);
13293 if (prs) {
13294 ok = lib_fast::DecodeUnsigned(from,parent.InstrumentScopeProductComplex.value,false);
13295 if (!ok) {
13296 state.error << "emdi12.MassInstrumentStateChange.InstrumentScopeProductComplex: bad Unsigned" << eol;
13297 }
13298 } else if (InstrumentScopeProductComplex_AssignedQ(state)) {
13299 parent.InstrumentScopeProductComplex.value = state.InstrumentScopeProductComplex.value;
13300 } else {
13301 ok = false;
13302 state.error << "emdi12.MassInstrumentStateChange.InstrumentScopeProductComplex: copy operator: previous value unassigned" << eol;
13303 }
13304 InstrumentScopeProductComplex_SetAssigned(state);
13305 state.InstrumentScopeProductComplex.value = parent.InstrumentScopeProductComplex.value;
13306 }
13307 // SecurityMassStatus type default mandatory
13308 if (ok) {
13309 bool prs = lib_fast::GetPmapBit(pmap,5);
13310 if (prs) {
13311 ok = lib_fast::DecodeUnsigned(from,parent.SecurityMassStatus.value,false);
13312 if (!ok) {
13313 state.error << "emdi12.MassInstrumentStateChange.SecurityMassStatus: bad Unsigned" << eol;
13314 }
13315 } else {
13316 parent.SecurityMassStatus.value = 0;
13317 }
13318 }
13319 // SecurityMassTradingStatus type copy optional
13320 if (ok) {
13321 bool prs = lib_fast::GetPmapBit(pmap,6);
13322 if (prs) {
13323 prs = !lib_fast::DecodeNull(from);
13324 if (prs) {
13325 ok = lib_fast::DecodeUnsigned(from,parent.SecurityMassTradingStatus.value,true);
13326 if (!ok) {
13327 state.error << "emdi12.MassInstrumentStateChange.SecurityMassTradingStatus: bad Unsigned" << eol;
13328 }
13329 }
13330 } else if (SecurityMassTradingStatus_AssignedQ(state)) {
13331 parent.SecurityMassTradingStatus.value = state.SecurityMassTradingStatus.value;
13332 prs = SecurityMassTradingStatus_PresentQ(state);
13333 } else {
13334 prs = false;
13335 }
13336 pmask_qSetBitVal(parent,SecurityMassTradingStatus_Present_GetBit(parent),prs);
13337 SecurityMassTradingStatus_SetAssigned(state);
13338 present_qSetBitVal(state,SecurityMassTradingStatus_Present_GetBit(state),prs);
13339 state.SecurityMassTradingStatus.value = parent.SecurityMassTradingStatus.value;
13340 }
13341 // MassMarketCondition type default mandatory
13342 if (ok) {
13343 bool prs = lib_fast::GetPmapBit(pmap,7);
13344 if (prs) {
13345 ok = lib_fast::DecodeUnsigned(from,parent.MassMarketCondition.value,false);
13346 if (!ok) {
13347 state.error << "emdi12.MassInstrumentStateChange.MassMarketCondition: bad Unsigned" << eol;
13348 }
13349 } else {
13350 parent.MassMarketCondition.value = 0;
13351 }
13352 }
13353 // FastMarketIndicator type default mandatory
13354 if (ok) {
13355 bool prs = lib_fast::GetPmapBit(pmap,8);
13356 if (prs) {
13357 ok = lib_fast::DecodeUnsigned(from,parent.FastMarketIndicator.value,false);
13358 if (!ok) {
13359 state.error << "emdi12.MassInstrumentStateChange.FastMarketIndicator: bad Unsigned" << eol;
13360 }
13361 } else {
13362 parent.FastMarketIndicator.value = 0;
13363 }
13364 }
13365 // SecurityMassTradingEvent type default optional
13366 if (ok) {
13367 bool prs = lib_fast::GetPmapBit(pmap,9);
13368 if (prs) {
13369 prs = !lib_fast::DecodeNull(from);
13370 if (prs) {
13371 ok = lib_fast::DecodeUnsigned(from,parent.SecurityMassTradingEvent.value,true);
13372 if (!ok) {
13373 state.error << "emdi12.MassInstrumentStateChange.SecurityMassTradingEvent: bad Unsigned" << eol;
13374 }
13375 }
13376 } else {
13377 }
13378 pmask_qSetBitVal(parent,SecurityMassTradingEvent_Present_GetBit(parent),prs);
13379 }
13380 // MassSoldOutIndicator type default optional
13381 if (ok) {
13382 bool prs = lib_fast::GetPmapBit(pmap,10);
13383 if (prs) {
13384 prs = !lib_fast::DecodeNull(from);
13385 if (prs) {
13386 ok = lib_fast::DecodeUnsigned(from,parent.MassSoldOutIndicator.value,true);
13387 if (!ok) {
13388 state.error << "emdi12.MassInstrumentStateChange.MassSoldOutIndicator: bad Unsigned" << eol;
13389 }
13390 }
13391 } else {
13392 }
13393 pmask_qSetBitVal(parent,MassSoldOutIndicator_Present_GetBit(parent),prs);
13394 }
13395 // TransactTime signed delta mandatory
13396 if (ok) {
13397 if (!TransactTime_AssignedQ(state)) {
13398 TransactTime_SetAssigned(state);
13399 state.TransactTime = 0;
13400 }
13401 ok = lib_fast::DecodeDeltaSigned(from,state.TransactTime,parent.TransactTime,false);
13402 if (!ok) {
13403 state.error << "emdi12.MassInstrumentStateChange.TransactTime: bad Signed delta" << eol;
13404 }
13405 state.TransactTime = parent.TransactTime;
13406 }
13407 // TESSecurityMassStatus type default optional
13408 if (ok) {
13409 bool prs = lib_fast::GetPmapBit(pmap,11);
13410 if (prs) {
13411 prs = !lib_fast::DecodeNull(from);
13412 if (prs) {
13413 ok = lib_fast::DecodeUnsigned(from,parent.TESSecurityMassStatus.value,true);
13414 if (!ok) {
13415 state.error << "emdi12.MassInstrumentStateChange.TESSecurityMassStatus: bad Unsigned" << eol;
13416 }
13417 }
13418 } else {
13419 parent.TESSecurityMassStatus.value = 0;
13420 prs = true;
13421 }
13422 pmask_qSetBitVal(parent,TESSecurityMassStatus_Present_GetBit(parent),prs);
13423 }
13424 // SecMassStatGrp sequence none mandatory
13425 if (ok) {
13426 u32 length(0);
13427 bool prs = lib_fast::GetPmapBit(pmap,12);
13428 if (prs) {
13429 ok = lib_fast::DecodeUnsigned(from,length,false);
13430 if (!ok) {
13431 state.error << "emdi12.MassInstrumentStateChange.SecMassStatGrp: bad Unsigned" << eol;
13432 }
13433 } else {
13434 length = 0;
13435 }
13436 if (!ok) {
13437 state.error << "emdi12.MassInstrumentStateChange.SecMassStatGrp: bad length" << eol;
13438 }
13439 for (unsigned i=0; ok && i<length; ++i) {
13440 SecMassStatGrp &seq = *new(ary_AllocN(lib_fast::_db.varlen,sizeof seq).elems) SecMassStatGrp;
13441 ok = SecMassStatGrp_FastDecode(from,state,seq);
13442 if (!ok) {
13443 state.error << "emdi12.MassInstrumentStateChange.SecMassStatGrp: element #"<< i+1 << eol;
13444 }
13445 }
13446 }
13447 // LastFragment type default mandatory
13448 if (ok) {
13449 bool prs = lib_fast::GetPmapBit(pmap,13);
13450 if (prs) {
13451 ok = lib_fast::DecodeUnsigned(from,parent.LastFragment.value,false);
13452 if (!ok) {
13453 state.error << "emdi12.MassInstrumentStateChange.LastFragment: bad Unsigned" << eol;
13454 }
13455 } else {
13456 parent.LastFragment.value = 1;
13457 }
13458 }
13459 return ok;
13460}
13461
13462// --- emdi12.MassInstrumentStateChange..FixEncode
13463void emdi12::MassInstrumentStateChange_FixEncode(cstring& buf, emdi12::MassInstrumentStateChange& parent, char soh) {
13464 buf << "35=" << MsgType_Get(parent) << soh;
13465 buf << "34=" << parent.MsgSeqNum << soh;
13466 buf << "49=" << parent.SenderCompID << soh;
13467 buf << "1300=" << parent.MarketSegmentID << soh;
13468 buf << "1544=" << parent.InstrumentScopeProductComplex << soh;
13469 buf << "30965=" << parent.SecurityMassStatus << soh;
13470 if (SecurityMassTradingStatus_PresentQ(parent)) {
13471 buf << "1679=" << parent.SecurityMassTradingStatus << soh;
13472 }
13473 buf << "28894=" << parent.MassMarketCondition << soh;
13474 buf << "2447=" << parent.FastMarketIndicator << soh;
13475 if (SecurityMassTradingEvent_PresentQ(parent)) {
13476 buf << "1680=" << parent.SecurityMassTradingEvent << soh;
13477 }
13478 if (MassSoldOutIndicator_PresentQ(parent)) {
13479 buf << "35155=" << parent.MassSoldOutIndicator << soh;
13480 }
13481 buf << "60=" << parent.TransactTime << soh;
13482 if (TESSecurityMassStatus_PresentQ(parent)) {
13483 buf << "35045=" << parent.TESSecurityMassStatus << soh;
13484 }
13485 {
13486 u32 length = SecMassStatGrp_N(parent);
13487 if (length) {
13488 buf << "146=" << length << soh;
13489 }
13490 }
13491 ind_beg(MassInstrumentStateChange_SecMassStatGrp_curs,elem,parent) {
13492 SecMassStatGrp_FixEncode(buf,elem,soh);
13493 }ind_end;
13494 buf << "893=" << parent.LastFragment << soh;
13495}
13496
13497// --- emdi12.ProductStateChange.base.CopyOut
13498// Copy fields out of row
13499void emdi12::parent_CopyOut(emdi12::ProductStateChange &row, emdi12::TemplateHeader &out) {
13500 // length: field value is computed
13501 // id: field value is computed
13502 (void)row;//only to avoid -Wunused-parameter
13503 (void)out;//only to avoid -Wunused-parameter
13504}
13505
13506// --- emdi12.ProductStateChange.MsgSeqNum.ReadStrptrMaybe
13507inline static bool emdi12::MsgSeqNum_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13508 bool retval = true;
13509 retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, in_str);
13510 return retval;
13511}
13512
13513// --- emdi12.ProductStateChange.SenderCompID.ReadStrptrMaybe
13514inline static bool emdi12::SenderCompID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13515 bool retval = true;
13516 retval = u32_ReadStrptrMaybe(parent.SenderCompID, in_str);
13517 return retval;
13518}
13519
13520// --- emdi12.ProductStateChange.MarketSegmentID.ReadStrptrMaybe
13521inline static bool emdi12::MarketSegmentID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13522 bool retval = true;
13523 retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, in_str);
13524 return retval;
13525}
13526
13527// --- emdi12.ProductStateChange.TradingSessionID.ReadStrptrMaybe
13528inline static bool emdi12::TradingSessionID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13529 bool retval = true;
13530 retval = emdi12::TradingSessionID_ReadStrptrMaybe(parent.TradingSessionID, in_str);
13531 return retval;
13532}
13533
13534// --- emdi12.ProductStateChange.TradingSessionSubID.ReadStrptrMaybe
13535inline static bool emdi12::TradingSessionSubID_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13536 bool retval = true;
13537 retval = emdi12::TradingSessionSubID_ReadStrptrMaybe(parent.TradingSessionSubID, in_str);
13538 return retval;
13539}
13540
13541// --- emdi12.ProductStateChange.TradSesStatus.ReadStrptrMaybe
13542inline static bool emdi12::TradSesStatus_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13543 bool retval = true;
13544 retval = emdi12::TradSesStatus_ReadStrptrMaybe(parent.TradSesStatus, in_str);
13545 return retval;
13546}
13547
13548// --- emdi12.ProductStateChange.MarketCondition.ReadStrptrMaybe
13549inline static bool emdi12::MarketCondition_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13550 bool retval = true;
13551 emdi12::MarketCondition MarketCondition_tmp;
13552 retval = emdi12::MarketCondition_ReadStrptrMaybe(MarketCondition_tmp, in_str);
13553 if (retval) {
13554 MarketCondition_Set(parent, MarketCondition_tmp);
13555 }
13556 return retval;
13557}
13558
13559// --- emdi12.ProductStateChange.FastMarketIndicator.ReadStrptrMaybe
13560inline static bool emdi12::FastMarketIndicator_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13561 bool retval = true;
13562 retval = emdi12::FastMarketIndicator_ReadStrptrMaybe(parent.FastMarketIndicator, in_str);
13563 return retval;
13564}
13565
13566// --- emdi12.ProductStateChange.TransactTime.ReadStrptrMaybe
13567inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13568 bool retval = true;
13569 retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
13570 return retval;
13571}
13572
13573// --- emdi12.ProductStateChange.TESTradSesStatus.ReadStrptrMaybe
13574inline static bool emdi12::TESTradSesStatus_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13575 bool retval = true;
13576 emdi12::TradSesStatus TESTradSesStatus_tmp;
13577 retval = emdi12::TradSesStatus_ReadStrptrMaybe(TESTradSesStatus_tmp, in_str);
13578 if (retval) {
13579 TESTradSesStatus_Set(parent, TESTradSesStatus_tmp);
13580 }
13581 return retval;
13582}
13583
13584// --- emdi12.ProductStateChange.pmask_bitcurs.Next
13585// proceed to next item
13586void emdi12::ProductStateChange_pmask_bitcurs_Next(ProductStateChange_pmask_bitcurs &curs) {
13587 ++curs.bit;
13588 int index = curs.bit / 32;
13589 int offset = curs.bit % 32;
13590 for (; index < curs.n_elems; ++index, offset = 0) {
13591 u64 rest = curs.elems[index] >> offset;
13592 if (rest) {
13593 offset += algo::u64_BitScanForward(rest);
13594 break;
13595 }
13596 }
13597 curs.bit = index * 32 + offset;
13598}
13599
13600// --- emdi12.ProductStateChange..ReadFieldMaybe
13601bool emdi12::ProductStateChange_ReadFieldMaybe(emdi12::ProductStateChange& parent, algo::strptr field, algo::strptr strval) {
13602 bool retval = true;
13603 emdi12::FieldId field_id;
13604 (void)value_SetStrptrMaybe(field_id,field);
13605 switch(field_id) {
13606 case emdi12_FieldId_base: {
13607 retval = false;
13608 break;
13609 }
13610 case emdi12_FieldId_length: {
13611 retval = false;
13612 break;
13613 }
13614 case emdi12_FieldId_id: {
13615 retval = false;
13616 break;
13617 }
13618 case emdi12_FieldId_pmask: {
13619 retval = false;
13620 break;
13621 }
13622 case emdi12_FieldId_MsgType: {
13623 retval = true;
13624 break;
13625 }
13626 case emdi12_FieldId_MsgSeqNum: {
13627 retval = MsgSeqNum_ReadStrptrMaybe(parent, strval);
13628 break;
13629 }
13630 case emdi12_FieldId_SenderCompID: {
13631 retval = SenderCompID_ReadStrptrMaybe(parent, strval);
13632 break;
13633 }
13634 case emdi12_FieldId_MarketSegmentID: {
13635 retval = MarketSegmentID_ReadStrptrMaybe(parent, strval);
13636 break;
13637 }
13638 case emdi12_FieldId_TradingSessionID: {
13639 retval = TradingSessionID_ReadStrptrMaybe(parent, strval);
13640 break;
13641 }
13642 case emdi12_FieldId_TradingSessionSubID: {
13643 retval = TradingSessionSubID_ReadStrptrMaybe(parent, strval);
13644 break;
13645 }
13646 case emdi12_FieldId_TradSesStatus: {
13647 retval = TradSesStatus_ReadStrptrMaybe(parent, strval);
13648 break;
13649 }
13650 case emdi12_FieldId_MarketCondition: {
13651 retval = MarketCondition_ReadStrptrMaybe(parent, strval);
13652 if (retval) {
13653 pmask_qSetBit(parent, 0);
13654 }
13655 break;
13656 }
13657 case emdi12_FieldId_FastMarketIndicator: {
13658 retval = FastMarketIndicator_ReadStrptrMaybe(parent, strval);
13659 break;
13660 }
13661 case emdi12_FieldId_TransactTime: {
13662 retval = TransactTime_ReadStrptrMaybe(parent, strval);
13663 break;
13664 }
13665 case emdi12_FieldId_TESTradSesStatus: {
13666 retval = TESTradSesStatus_ReadStrptrMaybe(parent, strval);
13667 if (retval) {
13668 pmask_qSetBit(parent, 1);
13669 }
13670 break;
13671 }
13672 default: break;
13673 }
13674 if (!retval) {
13675 algo_lib::AppendErrtext("attr",field);
13676 }
13677 return retval;
13678}
13679
13680// --- emdi12.ProductStateChange..ReadStrptrMaybe
13681// Read fields of emdi12::ProductStateChange from an ascii string.
13682// The format of the string is an ssim Tuple
13683bool emdi12::ProductStateChange_ReadStrptrMaybe(emdi12::ProductStateChange &parent, algo::strptr in_str) {
13684 bool retval = true;
13685 retval = algo::StripTypeTag(in_str, "emdi12.ProductStateChange");
13686 ind_beg(algo::Attr_curs, attr, in_str) {
13687 retval = retval && ProductStateChange_ReadFieldMaybe(parent, attr.name, attr.value);
13688 }ind_end;
13689 return retval;
13690}
13691
13692// --- emdi12.ProductStateChange..Init
13693// Set all fields to initial values.
13694void emdi12::ProductStateChange_Init(emdi12::ProductStateChange& parent) {
13695 parent.length = u32(ssizeof(parent) + (0));
13696 parent.id = u32(97);
13697 parent.pmask = u32(0);
13698 parent.MsgSeqNum = u32(0);
13699 parent.SenderCompID = u32(0);
13700 parent.MarketSegmentID = u32(0);
13701 parent.TradingSessionID = emdi12_TradingSessionIDEnum(0);
13702 parent.MarketCondition = emdi12_MarketConditionEnum(0);
13703 parent.FastMarketIndicator = emdi12_FastMarketIndicatorEnum(0);
13704 parent.TransactTime = i64(0);
13705}
13706
13707// --- emdi12.ProductStateChange..Print
13708// print string representation of ROW to string STR
13709// cfmt:emdi12.ProductStateChange.String printfmt:Tuple
13710void emdi12::ProductStateChange_Print(emdi12::ProductStateChange& row, algo::cstring& str) {
13711 algo::tempstr temp;
13712 str << "emdi12.ProductStateChange";
13713
13714 algo::strptr_Print(MsgType_Get(row), temp);
13715 PrintAttrSpaceReset(str,"MsgType", temp);
13716
13717 u32_Print(row.MsgSeqNum, temp);
13718 PrintAttrSpaceReset(str,"MsgSeqNum", temp);
13719
13720 u32_Print(row.SenderCompID, temp);
13721 PrintAttrSpaceReset(str,"SenderCompID", temp);
13722
13723 u32_Print(row.MarketSegmentID, temp);
13724 PrintAttrSpaceReset(str,"MarketSegmentID", temp);
13725
13726 emdi12::TradingSessionID_Print(row.TradingSessionID, temp);
13727 PrintAttrSpaceReset(str,"TradingSessionID", temp);
13728
13729 emdi12::TradingSessionSubID_Print(row.TradingSessionSubID, temp);
13730 PrintAttrSpaceReset(str,"TradingSessionSubID", temp);
13731
13732 emdi12::TradSesStatus_Print(row.TradSesStatus, temp);
13733 PrintAttrSpaceReset(str,"TradSesStatus", temp);
13734
13735 if (MarketCondition_PresentQ(row)) {
13736 emdi12::MarketCondition_Print(row.MarketCondition, temp);
13737 PrintAttrSpaceReset(str,"MarketCondition", temp);
13738 }
13739
13740 emdi12::FastMarketIndicator_Print(row.FastMarketIndicator, temp);
13741 PrintAttrSpaceReset(str,"FastMarketIndicator", temp);
13742
13743 i64_Print(row.TransactTime, temp);
13744 PrintAttrSpaceReset(str,"TransactTime", temp);
13745
13746 if (TESTradSesStatus_PresentQ(row)) {
13747 emdi12::TradSesStatus_Print(row.TESTradSesStatus, temp);
13748 PrintAttrSpaceReset(str,"TESTradSesStatus", temp);
13749 }
13750}
13751
13752// --- emdi12.ProductStateChange..FastEncode
13753void emdi12::ProductStateChange_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::ProductStateChange& parent) {
13754 int index = ary_N(buf);
13755 u64 pmap(0);
13756 if (!tid_AssignedQ(state) || parent.id != state.tid) {
13757 lib_fast::EncodeUnsigned(buf,parent.id,false);
13758 lib_fast::SetPmapBit(pmap,0);
13759 }
13760 tid_SetAssigned(state);
13761 state.tid = parent.id;
13762 // MsgType string constant mandatory
13763 // MsgSeqNum unsigned increment mandatory
13764 if (MsgSeqNum_AssignedQ(state)) {
13765 if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
13766 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
13767 lib_fast::SetPmapBit(pmap,1);
13768 }
13769 } else {
13770 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
13771 lib_fast::SetPmapBit(pmap,1);
13772 }
13773 state.MsgSeqNum = parent.MsgSeqNum;
13774 MsgSeqNum_SetAssigned(state);
13775 // SenderCompID unsigned copy mandatory
13776 if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
13777 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
13778 lib_fast::SetPmapBit(pmap,2);
13779 }
13780 state.SenderCompID = parent.SenderCompID;
13781 SenderCompID_SetAssigned(state);
13782 // MarketSegmentID unsigned copy mandatory
13783 if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
13784 lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
13785 lib_fast::SetPmapBit(pmap,3);
13786 }
13787 state.MarketSegmentID = parent.MarketSegmentID;
13788 MarketSegmentID_SetAssigned(state);
13789 // TradingSessionID type default mandatory
13790 if (parent.TradingSessionID.value != 0) {
13791 lib_fast::EncodeUnsigned(buf,parent.TradingSessionID.value,false);
13792 lib_fast::SetPmapBit(pmap,4);
13793 }
13794 // TradingSessionSubID type none mandatory
13795 lib_fast::EncodeUnsigned(buf,parent.TradingSessionSubID.value,false);
13796 // TradSesStatus type none mandatory
13797 lib_fast::EncodeUnsigned(buf,parent.TradSesStatus.value,false);
13798 // MarketCondition type default optional
13799 if (MarketCondition_PresentQ(parent)) {
13800 if (parent.MarketCondition.value != 0) {
13801 lib_fast::EncodeUnsigned(buf,parent.MarketCondition.value,true);
13802 lib_fast::SetPmapBit(pmap,5);
13803 }
13804 } else {
13805 lib_fast::EncodeNull(buf);
13806 lib_fast::SetPmapBit(pmap,5);
13807 }
13808 // FastMarketIndicator type default mandatory
13809 if (parent.FastMarketIndicator.value != 0) {
13810 lib_fast::EncodeUnsigned(buf,parent.FastMarketIndicator.value,false);
13811 lib_fast::SetPmapBit(pmap,6);
13812 }
13813 // TransactTime signed none mandatory
13814 lib_fast::EncodeSigned(buf,parent.TransactTime,false);
13815 // TESTradSesStatus type none optional
13816 if (TESTradSesStatus_PresentQ(parent)) {
13817 lib_fast::EncodeUnsigned(buf,parent.TESTradSesStatus.value,true);
13818 } else {
13819 lib_fast::EncodeNull(buf);
13820 }
13821 lib_fast::InsertPmap(buf,index,pmap);
13822}
13823
13824// --- emdi12.ProductStateChange..FastDecode
13825bool emdi12::ProductStateChange_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::ProductStateChange& parent) {
13826 bool ok = true;
13827 // MsgType string constant mandatory
13828 if (ok) {
13829 }
13830 // MsgSeqNum unsigned increment mandatory
13831 if (ok) {
13832 bool prs = lib_fast::GetPmapBit(pmap,1);
13833 if (prs) {
13834 ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
13835 if (!ok) {
13836 state.error << "emdi12.ProductStateChange.MsgSeqNum: bad Unsigned" << eol;
13837 }
13838 } else if (MsgSeqNum_AssignedQ(state)) {
13839 parent.MsgSeqNum = state.MsgSeqNum + 1;
13840 } else {
13841 ok = false;
13842 state.error << "emdi12.ProductStateChange.MsgSeqNum: increment operator: previous value unassigned" << eol;
13843 }
13844 MsgSeqNum_SetAssigned(state);
13845 state.MsgSeqNum = parent.MsgSeqNum;
13846 }
13847 // SenderCompID unsigned copy mandatory
13848 if (ok) {
13849 bool prs = lib_fast::GetPmapBit(pmap,2);
13850 if (prs) {
13851 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
13852 if (!ok) {
13853 state.error << "emdi12.ProductStateChange.SenderCompID: bad Unsigned" << eol;
13854 }
13855 } else if (SenderCompID_AssignedQ(state)) {
13856 parent.SenderCompID = state.SenderCompID;
13857 } else {
13858 ok = false;
13859 state.error << "emdi12.ProductStateChange.SenderCompID: copy operator: previous value unassigned" << eol;
13860 }
13861 SenderCompID_SetAssigned(state);
13862 state.SenderCompID = parent.SenderCompID;
13863 }
13864 // MarketSegmentID unsigned copy mandatory
13865 if (ok) {
13866 bool prs = lib_fast::GetPmapBit(pmap,3);
13867 if (prs) {
13868 ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
13869 if (!ok) {
13870 state.error << "emdi12.ProductStateChange.MarketSegmentID: bad Unsigned" << eol;
13871 }
13872 } else if (MarketSegmentID_AssignedQ(state)) {
13873 parent.MarketSegmentID = state.MarketSegmentID;
13874 } else {
13875 ok = false;
13876 state.error << "emdi12.ProductStateChange.MarketSegmentID: copy operator: previous value unassigned" << eol;
13877 }
13878 MarketSegmentID_SetAssigned(state);
13879 state.MarketSegmentID = parent.MarketSegmentID;
13880 }
13881 // TradingSessionID type default mandatory
13882 if (ok) {
13883 bool prs = lib_fast::GetPmapBit(pmap,4);
13884 if (prs) {
13885 ok = lib_fast::DecodeUnsigned(from,parent.TradingSessionID.value,false);
13886 if (!ok) {
13887 state.error << "emdi12.ProductStateChange.TradingSessionID: bad Unsigned" << eol;
13888 }
13889 } else {
13890 parent.TradingSessionID.value = 0;
13891 }
13892 }
13893 // TradingSessionSubID type none mandatory
13894 if (ok) {
13895 ok = lib_fast::DecodeUnsigned(from,parent.TradingSessionSubID.value,false);
13896 if (!ok) {
13897 state.error << "emdi12.ProductStateChange.TradingSessionSubID: bad Unsigned" << eol;
13898 }
13899 }
13900 // TradSesStatus type none mandatory
13901 if (ok) {
13902 ok = lib_fast::DecodeUnsigned(from,parent.TradSesStatus.value,false);
13903 if (!ok) {
13904 state.error << "emdi12.ProductStateChange.TradSesStatus: bad Unsigned" << eol;
13905 }
13906 }
13907 // MarketCondition type default optional
13908 if (ok) {
13909 bool prs = lib_fast::GetPmapBit(pmap,5);
13910 if (prs) {
13911 prs = !lib_fast::DecodeNull(from);
13912 if (prs) {
13913 ok = lib_fast::DecodeUnsigned(from,parent.MarketCondition.value,true);
13914 if (!ok) {
13915 state.error << "emdi12.ProductStateChange.MarketCondition: bad Unsigned" << eol;
13916 }
13917 }
13918 } else {
13919 parent.MarketCondition.value = 0;
13920 prs = true;
13921 }
13922 pmask_qSetBitVal(parent,MarketCondition_Present_GetBit(parent),prs);
13923 }
13924 // FastMarketIndicator type default mandatory
13925 if (ok) {
13926 bool prs = lib_fast::GetPmapBit(pmap,6);
13927 if (prs) {
13928 ok = lib_fast::DecodeUnsigned(from,parent.FastMarketIndicator.value,false);
13929 if (!ok) {
13930 state.error << "emdi12.ProductStateChange.FastMarketIndicator: bad Unsigned" << eol;
13931 }
13932 } else {
13933 parent.FastMarketIndicator.value = 0;
13934 }
13935 }
13936 // TransactTime signed none mandatory
13937 if (ok) {
13938 ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
13939 if (!ok) {
13940 state.error << "emdi12.ProductStateChange.TransactTime: bad Signed" << eol;
13941 }
13942 }
13943 // TESTradSesStatus type none optional
13944 if (ok) {
13945 bool prs = !lib_fast::DecodeNull(from);
13946 if (prs) {
13947 ok = lib_fast::DecodeUnsigned(from,parent.TESTradSesStatus.value,true);
13948 if (!ok) {
13949 state.error << "emdi12.ProductStateChange.TESTradSesStatus: bad Unsigned" << eol;
13950 }
13951 }
13952 pmask_qSetBitVal(parent,TESTradSesStatus_Present_GetBit(parent),prs);
13953 }
13954 return ok;
13955}
13956
13957// --- emdi12.ProductStateChange..FixEncode
13958void emdi12::ProductStateChange_FixEncode(cstring& buf, emdi12::ProductStateChange& parent, char soh) {
13959 buf << "35=" << MsgType_Get(parent) << soh;
13960 buf << "34=" << parent.MsgSeqNum << soh;
13961 buf << "49=" << parent.SenderCompID << soh;
13962 buf << "1300=" << parent.MarketSegmentID << soh;
13963 buf << "336=" << parent.TradingSessionID << soh;
13964 buf << "625=" << parent.TradingSessionSubID << soh;
13965 buf << "340=" << parent.TradSesStatus << soh;
13966 if (MarketCondition_PresentQ(parent)) {
13967 buf << "2705=" << parent.MarketCondition << soh;
13968 }
13969 buf << "2447=" << parent.FastMarketIndicator << soh;
13970 buf << "60=" << parent.TransactTime << soh;
13971 if (TESTradSesStatus_PresentQ(parent)) {
13972 buf << "25044=" << parent.TESTradSesStatus << soh;
13973 }
13974}
13975
13976// --- emdi12.QuotReqGrp.SecurityID.ReadStrptrMaybe
13977inline static bool emdi12::SecurityID_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) {
13978 bool retval = true;
13979 retval = i64_ReadStrptrMaybe(parent.SecurityID, in_str);
13980 return retval;
13981}
13982
13983// --- emdi12.QuotReqGrp.Side.ReadStrptrMaybe
13984inline static bool emdi12::Side_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) {
13985 bool retval = true;
13986 emdi12::Side Side_tmp;
13987 retval = emdi12::Side_ReadStrptrMaybe(Side_tmp, in_str);
13988 if (retval) {
13989 Side_Set(parent, Side_tmp);
13990 }
13991 return retval;
13992}
13993
13994// --- emdi12.QuotReqGrp.OrderQty.ReadStrptrMaybe
13995inline static bool emdi12::OrderQty_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) {
13996 bool retval = true;
13997 algo::Decimal OrderQty_tmp;
13998 retval = algo::Decimal_ReadStrptrMaybe(OrderQty_tmp, in_str);
13999 if (retval) {
14000 OrderQty_Set(parent, OrderQty_tmp);
14001 }
14002 return retval;
14003}
14004
14005// --- emdi12.QuotReqGrp.TransactTime.ReadStrptrMaybe
14006inline static bool emdi12::TransactTime_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) {
14007 bool retval = true;
14008 retval = i64_ReadStrptrMaybe(parent.TransactTime, in_str);
14009 return retval;
14010}
14011
14012// --- emdi12.QuotReqGrp.pmask_bitcurs.Next
14013// proceed to next item
14014void emdi12::QuotReqGrp_pmask_bitcurs_Next(QuotReqGrp_pmask_bitcurs &curs) {
14015 ++curs.bit;
14016 int index = curs.bit / 32;
14017 int offset = curs.bit % 32;
14018 for (; index < curs.n_elems; ++index, offset = 0) {
14019 u64 rest = curs.elems[index] >> offset;
14020 if (rest) {
14021 offset += algo::u64_BitScanForward(rest);
14022 break;
14023 }
14024 }
14025 curs.bit = index * 32 + offset;
14026}
14027
14028// --- emdi12.QuotReqGrp..ReadFieldMaybe
14029bool emdi12::QuotReqGrp_ReadFieldMaybe(emdi12::QuotReqGrp& parent, algo::strptr field, algo::strptr strval) {
14030 bool retval = true;
14031 emdi12::FieldId field_id;
14032 (void)value_SetStrptrMaybe(field_id,field);
14033 switch(field_id) {
14034 case emdi12_FieldId_pmask: {
14035 retval = false;
14036 break;
14037 }
14038 case emdi12_FieldId_SecurityID: {
14039 retval = SecurityID_ReadStrptrMaybe(parent, strval);
14040 break;
14041 }
14042 case emdi12_FieldId_SecurityIDSource: {
14043 retval = true;
14044 break;
14045 }
14046 case emdi12_FieldId_Side: {
14047 retval = Side_ReadStrptrMaybe(parent, strval);
14048 if (retval) {
14049 pmask_qSetBit(parent, 1);
14050 }
14051 break;
14052 }
14053 case emdi12_FieldId_OrderQty: {
14054 retval = OrderQty_ReadStrptrMaybe(parent, strval);
14055 if (retval) {
14056 pmask_qSetBit(parent, 0);
14057 }
14058 break;
14059 }
14060 case emdi12_FieldId_TransactTime: {
14061 retval = TransactTime_ReadStrptrMaybe(parent, strval);
14062 break;
14063 }
14064 default: break;
14065 }
14066 if (!retval) {
14067 algo_lib::AppendErrtext("attr",field);
14068 }
14069 return retval;
14070}
14071
14072// --- emdi12.QuotReqGrp..ReadStrptrMaybe
14073// Read fields of emdi12::QuotReqGrp from an ascii string.
14074// The format of the string is an ssim Tuple
14075bool emdi12::QuotReqGrp_ReadStrptrMaybe(emdi12::QuotReqGrp &parent, algo::strptr in_str) {
14076 bool retval = true;
14077 retval = algo::StripTypeTag(in_str, "emdi12.QuotReqGrp");
14078 ind_beg(algo::Attr_curs, attr, in_str) {
14079 retval = retval && QuotReqGrp_ReadFieldMaybe(parent, attr.name, attr.value);
14080 }ind_end;
14081 return retval;
14082}
14083
14084// --- emdi12.QuotReqGrp..Print
14085// print string representation of ROW to string STR
14086// cfmt:emdi12.QuotReqGrp.String printfmt:Tuple
14087void emdi12::QuotReqGrp_Print(emdi12::QuotReqGrp& row, algo::cstring& str) {
14088 algo::tempstr temp;
14089 str << "emdi12.QuotReqGrp";
14090
14091 i64_Print(row.SecurityID, temp);
14092 PrintAttrSpaceReset(str,"SecurityID", temp);
14093
14094 algo::strptr_Print(SecurityIDSource_Get(row), temp);
14095 PrintAttrSpaceReset(str,"SecurityIDSource", temp);
14096
14097 if (Side_PresentQ(row)) {
14098 emdi12::Side_Print(row.Side, temp);
14099 PrintAttrSpaceReset(str,"Side", temp);
14100 }
14101
14102 if (OrderQty_PresentQ(row)) {
14103 algo::Decimal_Print(row.OrderQty, temp);
14104 PrintAttrSpaceReset(str,"OrderQty", temp);
14105 }
14106
14107 i64_Print(row.TransactTime, temp);
14108 PrintAttrSpaceReset(str,"TransactTime", temp);
14109}
14110
14111// --- emdi12.QuotReqGrp..FastEncode
14112void emdi12::QuotReqGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::QuotReqGrp& parent) {
14113 int index = ary_N(buf);
14114 u64 pmap(0);
14115 // SecurityID signed copy mandatory
14116 if (!SecurityID_AssignedQ(state) || parent.SecurityID != state.SecurityID) {
14117 lib_fast::EncodeSigned(buf,parent.SecurityID,false);
14118 lib_fast::SetPmapBit(pmap,0);
14119 }
14120 state.SecurityID = parent.SecurityID;
14121 SecurityID_SetAssigned(state);
14122 // SecurityIDSource string constant mandatory
14123 // Side type copy optional
14124 if (Side_PresentQ(parent)) {
14125 if (!Side_AssignedQ(state) || !Side_PresentQ(state) || parent.Side.value != state.Side.value ) {
14126 lib_fast::EncodeUnsigned(buf,parent.Side.value,true);
14127 lib_fast::SetPmapBit(pmap,1);
14128 }
14129 } else {
14130 if (Side_AssignedQ(state)) {
14131 lib_fast::EncodeNull(buf);
14132 lib_fast::SetPmapBit(pmap,1);
14133 }
14134 }
14135 state.Side.value = parent.Side.value;
14136 present_qSetBitVal(state,Side_Present_GetBit(state),Side_PresentQ(parent));
14137 Side_SetAssigned(state);
14138 // OrderQty scaled delta optional
14139 if (!OrderQty_AssignedQ(state)) {
14140 OrderQty_SetAssigned(state);
14141 present_qSetBitVal(state,OrderQty_Present_GetBit(state),OrderQty_PresentQ(parent));
14142 state.OrderQty = algo::Decimal(0,0);
14143 }
14144 if (OrderQty_PresentQ(parent)) {
14145 if (!OrderQty_PresentQ(state)) {
14146 state.OrderQty = algo::Decimal(0,0);
14147 }
14148 lib_fast::EncodeDeltaScaled(buf,state.OrderQty,parent.OrderQty,true);
14149 } else {
14150 lib_fast::EncodeNull(buf);
14151 }
14152 state.OrderQty = parent.OrderQty;
14153 present_qSetBitVal(state,OrderQty_Present_GetBit(state),OrderQty_PresentQ(parent));
14154 // TransactTime signed copy mandatory
14155 if (!TransactTime_AssignedQ(state) || parent.TransactTime != state.TransactTime) {
14156 lib_fast::EncodeSigned(buf,parent.TransactTime,false);
14157 lib_fast::SetPmapBit(pmap,2);
14158 }
14159 state.TransactTime = parent.TransactTime;
14160 TransactTime_SetAssigned(state);
14161 lib_fast::InsertPmap(buf,index,pmap);
14162}
14163
14164// --- emdi12.QuotReqGrp..FastDecode
14165bool emdi12::QuotReqGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::QuotReqGrp& parent) {
14166 bool ok = true;
14167 u64 pmap;
14168 ok = lib_fast::DecodePmap(from,pmap);
14169 if (!ok) {
14170 state.error << "emdi12.QuotReqGrp: bad pmap" << eol;
14171 }
14172 // SecurityID signed copy mandatory
14173 if (ok) {
14174 bool prs = lib_fast::GetPmapBit(pmap,0);
14175 if (prs) {
14176 ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
14177 if (!ok) {
14178 state.error << "emdi12.QuotReqGrp.SecurityID: bad Signed" << eol;
14179 }
14180 } else if (SecurityID_AssignedQ(state)) {
14181 parent.SecurityID = state.SecurityID;
14182 } else {
14183 ok = false;
14184 state.error << "emdi12.QuotReqGrp.SecurityID: copy operator: previous value unassigned" << eol;
14185 }
14186 SecurityID_SetAssigned(state);
14187 state.SecurityID = parent.SecurityID;
14188 }
14189 // SecurityIDSource string constant mandatory
14190 if (ok) {
14191 }
14192 // Side type copy optional
14193 if (ok) {
14194 bool prs = lib_fast::GetPmapBit(pmap,1);
14195 if (prs) {
14196 prs = !lib_fast::DecodeNull(from);
14197 if (prs) {
14198 ok = lib_fast::DecodeUnsigned(from,parent.Side.value,true);
14199 if (!ok) {
14200 state.error << "emdi12.QuotReqGrp.Side: bad Unsigned" << eol;
14201 }
14202 }
14203 } else if (Side_AssignedQ(state)) {
14204 parent.Side.value = state.Side.value;
14205 prs = Side_PresentQ(state);
14206 } else {
14207 prs = false;
14208 }
14209 pmask_qSetBitVal(parent,Side_Present_GetBit(parent),prs);
14210 Side_SetAssigned(state);
14211 present_qSetBitVal(state,Side_Present_GetBit(state),prs);
14212 state.Side.value = parent.Side.value;
14213 }
14214 // OrderQty scaled delta optional
14215 if (ok) {
14216 if (!OrderQty_AssignedQ(state)) {
14217 OrderQty_SetAssigned(state);
14218 bool prs(true);
14219 present_qSetBitVal(state,OrderQty_Present_GetBit(state),prs);
14220 state.OrderQty = algo::Decimal(0,0);
14221 }
14222 bool prs = !lib_fast::DecodeNull(from);
14223 if (prs) {
14224 if (!OrderQty_PresentQ(state)) {
14225 state.OrderQty = algo::Decimal(0,0);
14226 }
14227 ok = lib_fast::DecodeDeltaScaled(from,state.OrderQty,parent.OrderQty,true);
14228 if (!ok) {
14229 state.error << "emdi12.QuotReqGrp.OrderQty: bad Scaled delta" << eol;
14230 }
14231 state.OrderQty = parent.OrderQty;
14232 }
14233 pmask_qSetBitVal(parent,OrderQty_Present_GetBit(parent),prs);
14234 present_qSetBitVal(state,OrderQty_Present_GetBit(state),prs);
14235 }
14236 // TransactTime signed copy mandatory
14237 if (ok) {
14238 bool prs = lib_fast::GetPmapBit(pmap,2);
14239 if (prs) {
14240 ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
14241 if (!ok) {
14242 state.error << "emdi12.QuotReqGrp.TransactTime: bad Signed" << eol;
14243 }
14244 } else if (TransactTime_AssignedQ(state)) {
14245 parent.TransactTime = state.TransactTime;
14246 } else {
14247 ok = false;
14248 state.error << "emdi12.QuotReqGrp.TransactTime: copy operator: previous value unassigned" << eol;
14249 }
14250 TransactTime_SetAssigned(state);
14251 state.TransactTime = parent.TransactTime;
14252 }
14253 return ok;
14254}
14255
14256// --- emdi12.QuotReqGrp..FixEncode
14257void emdi12::QuotReqGrp_FixEncode(cstring& buf, emdi12::QuotReqGrp& parent, char soh) {
14258 buf << "48=" << parent.SecurityID << soh;
14259 buf << "22=" << SecurityIDSource_Get(parent) << soh;
14260 if (Side_PresentQ(parent)) {
14261 buf << "54=" << parent.Side << soh;
14262 }
14263 if (OrderQty_PresentQ(parent)) {
14264 buf << "38=" << parent.OrderQty << soh;
14265 }
14266 buf << "60=" << parent.TransactTime << soh;
14267}
14268
14269// --- emdi12.QuoteRequest.base.CopyOut
14270// Copy fields out of row
14271void emdi12::parent_CopyOut(emdi12::QuoteRequest &row, emdi12::TemplateHeader &out) {
14272 // length: field value is computed
14273 // id: field value is computed
14274 (void)row;//only to avoid -Wunused-parameter
14275 (void)out;//only to avoid -Wunused-parameter
14276}
14277
14278// --- emdi12.QuoteRequest..ReadFieldMaybe
14279bool emdi12::QuoteRequest_ReadFieldMaybe(emdi12::QuoteRequest& parent, algo::strptr field, algo::strptr strval) {
14280 bool retval = true;
14281 emdi12::FieldId field_id;
14282 (void)value_SetStrptrMaybe(field_id,field);
14283 switch(field_id) {
14284 case emdi12_FieldId_base: {
14285 retval = false;
14286 break;
14287 }
14288 case emdi12_FieldId_length: {
14289 retval = false;
14290 break;
14291 }
14292 case emdi12_FieldId_id: {
14293 retval = false;
14294 break;
14295 }
14296 case emdi12_FieldId_MsgType: {
14297 retval = true;
14298 break;
14299 }
14300 case emdi12_FieldId_MsgSeqNum: {
14301 retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, strval);
14302 break;
14303 }
14304 case emdi12_FieldId_SenderCompID: {
14305 retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
14306 break;
14307 }
14308 case emdi12_FieldId_MarketSegmentID: {
14309 retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
14310 break;
14311 }
14312 case emdi12_FieldId_QuotReqGrp: {
14313 retval = emdi12::QuotReqGrp_ReadStrptrMaybe(parent.QuotReqGrp, strval);
14314 break;
14315 }
14316 default: break;
14317 }
14318 if (!retval) {
14319 algo_lib::AppendErrtext("attr",field);
14320 }
14321 return retval;
14322}
14323
14324// --- emdi12.QuoteRequest..ReadStrptrMaybe
14325// Read fields of emdi12::QuoteRequest from an ascii string.
14326// The format of the string is an ssim Tuple
14327bool emdi12::QuoteRequest_ReadStrptrMaybe(emdi12::QuoteRequest &parent, algo::strptr in_str) {
14328 bool retval = true;
14329 retval = algo::StripTypeTag(in_str, "emdi12.QuoteRequest");
14330 ind_beg(algo::Attr_curs, attr, in_str) {
14331 retval = retval && QuoteRequest_ReadFieldMaybe(parent, attr.name, attr.value);
14332 }ind_end;
14333 return retval;
14334}
14335
14336// --- emdi12.QuoteRequest..Print
14337// print string representation of ROW to string STR
14338// cfmt:emdi12.QuoteRequest.String printfmt:Tuple
14339void emdi12::QuoteRequest_Print(emdi12::QuoteRequest& row, algo::cstring& str) {
14340 algo::tempstr temp;
14341 str << "emdi12.QuoteRequest";
14342
14343 algo::strptr_Print(MsgType_Get(row), temp);
14344 PrintAttrSpaceReset(str,"MsgType", temp);
14345
14346 u32_Print(row.MsgSeqNum, temp);
14347 PrintAttrSpaceReset(str,"MsgSeqNum", temp);
14348
14349 u32_Print(row.SenderCompID, temp);
14350 PrintAttrSpaceReset(str,"SenderCompID", temp);
14351
14352 u32_Print(row.MarketSegmentID, temp);
14353 PrintAttrSpaceReset(str,"MarketSegmentID", temp);
14354
14355 emdi12::QuotReqGrp_Print(row.QuotReqGrp, temp);
14356 PrintAttrSpaceReset(str,"QuotReqGrp", temp);
14357}
14358
14359// --- emdi12.QuoteRequest..FastEncode
14360void emdi12::QuoteRequest_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::QuoteRequest& parent) {
14361 int index = ary_N(buf);
14362 u64 pmap(0);
14363 if (!tid_AssignedQ(state) || parent.id != state.tid) {
14364 lib_fast::EncodeUnsigned(buf,parent.id,false);
14365 lib_fast::SetPmapBit(pmap,0);
14366 }
14367 tid_SetAssigned(state);
14368 state.tid = parent.id;
14369 // MsgType string constant mandatory
14370 // MsgSeqNum unsigned increment mandatory
14371 if (MsgSeqNum_AssignedQ(state)) {
14372 if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
14373 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
14374 lib_fast::SetPmapBit(pmap,1);
14375 }
14376 } else {
14377 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
14378 lib_fast::SetPmapBit(pmap,1);
14379 }
14380 state.MsgSeqNum = parent.MsgSeqNum;
14381 MsgSeqNum_SetAssigned(state);
14382 // SenderCompID unsigned copy mandatory
14383 if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
14384 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
14385 lib_fast::SetPmapBit(pmap,2);
14386 }
14387 state.SenderCompID = parent.SenderCompID;
14388 SenderCompID_SetAssigned(state);
14389 // MarketSegmentID unsigned copy mandatory
14390 if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
14391 lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
14392 lib_fast::SetPmapBit(pmap,3);
14393 }
14394 state.MarketSegmentID = parent.MarketSegmentID;
14395 MarketSegmentID_SetAssigned(state);
14396 // QuotReqGrp sequence none mandatory
14397 QuotReqGrp_FastEncode(buf,state,parent.QuotReqGrp);
14398 lib_fast::InsertPmap(buf,index,pmap);
14399}
14400
14401// --- emdi12.QuoteRequest..FastDecode
14402bool emdi12::QuoteRequest_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::QuoteRequest& parent) {
14403 bool ok = true;
14404 // MsgType string constant mandatory
14405 if (ok) {
14406 }
14407 // MsgSeqNum unsigned increment mandatory
14408 if (ok) {
14409 bool prs = lib_fast::GetPmapBit(pmap,1);
14410 if (prs) {
14411 ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
14412 if (!ok) {
14413 state.error << "emdi12.QuoteRequest.MsgSeqNum: bad Unsigned" << eol;
14414 }
14415 } else if (MsgSeqNum_AssignedQ(state)) {
14416 parent.MsgSeqNum = state.MsgSeqNum + 1;
14417 } else {
14418 ok = false;
14419 state.error << "emdi12.QuoteRequest.MsgSeqNum: increment operator: previous value unassigned" << eol;
14420 }
14421 MsgSeqNum_SetAssigned(state);
14422 state.MsgSeqNum = parent.MsgSeqNum;
14423 }
14424 // SenderCompID unsigned copy mandatory
14425 if (ok) {
14426 bool prs = lib_fast::GetPmapBit(pmap,2);
14427 if (prs) {
14428 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
14429 if (!ok) {
14430 state.error << "emdi12.QuoteRequest.SenderCompID: bad Unsigned" << eol;
14431 }
14432 } else if (SenderCompID_AssignedQ(state)) {
14433 parent.SenderCompID = state.SenderCompID;
14434 } else {
14435 ok = false;
14436 state.error << "emdi12.QuoteRequest.SenderCompID: copy operator: previous value unassigned" << eol;
14437 }
14438 SenderCompID_SetAssigned(state);
14439 state.SenderCompID = parent.SenderCompID;
14440 }
14441 // MarketSegmentID unsigned copy mandatory
14442 if (ok) {
14443 bool prs = lib_fast::GetPmapBit(pmap,3);
14444 if (prs) {
14445 ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
14446 if (!ok) {
14447 state.error << "emdi12.QuoteRequest.MarketSegmentID: bad Unsigned" << eol;
14448 }
14449 } else if (MarketSegmentID_AssignedQ(state)) {
14450 parent.MarketSegmentID = state.MarketSegmentID;
14451 } else {
14452 ok = false;
14453 state.error << "emdi12.QuoteRequest.MarketSegmentID: copy operator: previous value unassigned" << eol;
14454 }
14455 MarketSegmentID_SetAssigned(state);
14456 state.MarketSegmentID = parent.MarketSegmentID;
14457 }
14458 // QuotReqGrp sequence none mandatory
14459 if (ok) {
14460 ok = QuotReqGrp_FastDecode(from,state,parent.QuotReqGrp);
14461 }
14462 return ok;
14463}
14464
14465// --- emdi12.QuoteRequest..FixEncode
14466void emdi12::QuoteRequest_FixEncode(cstring& buf, emdi12::QuoteRequest& parent, char soh) {
14467 buf << "35=" << MsgType_Get(parent) << soh;
14468 buf << "34=" << parent.MsgSeqNum << soh;
14469 buf << "49=" << parent.SenderCompID << soh;
14470 buf << "1300=" << parent.MarketSegmentID << soh;
14471 buf << "146=1" << soh;
14472}
14473
14474// --- emdi12.RelatedInstrumentGrp..ReadFieldMaybe
14475bool emdi12::RelatedInstrumentGrp_ReadFieldMaybe(emdi12::RelatedInstrumentGrp& parent, algo::strptr field, algo::strptr strval) {
14476 bool retval = true;
14477 emdi12::FieldId field_id;
14478 (void)value_SetStrptrMaybe(field_id,field);
14479 switch(field_id) {
14480 case emdi12_FieldId_RelatedSecurityID: {
14481 retval = i64_ReadStrptrMaybe(parent.RelatedSecurityID, strval);
14482 break;
14483 }
14484 case emdi12_FieldId_RelatedSecurityIDSource: {
14485 retval = true;
14486 break;
14487 }
14488 default: break;
14489 }
14490 if (!retval) {
14491 algo_lib::AppendErrtext("attr",field);
14492 }
14493 return retval;
14494}
14495
14496// --- emdi12.RelatedInstrumentGrp..ReadStrptrMaybe
14497// Read fields of emdi12::RelatedInstrumentGrp from an ascii string.
14498// The format of the string is an ssim Tuple
14499bool emdi12::RelatedInstrumentGrp_ReadStrptrMaybe(emdi12::RelatedInstrumentGrp &parent, algo::strptr in_str) {
14500 bool retval = true;
14501 retval = algo::StripTypeTag(in_str, "emdi12.RelatedInstrumentGrp");
14502 ind_beg(algo::Attr_curs, attr, in_str) {
14503 retval = retval && RelatedInstrumentGrp_ReadFieldMaybe(parent, attr.name, attr.value);
14504 }ind_end;
14505 return retval;
14506}
14507
14508// --- emdi12.RelatedInstrumentGrp..Print
14509// print string representation of ROW to string STR
14510// cfmt:emdi12.RelatedInstrumentGrp.String printfmt:Tuple
14511void emdi12::RelatedInstrumentGrp_Print(emdi12::RelatedInstrumentGrp& row, algo::cstring& str) {
14512 algo::tempstr temp;
14513 str << "emdi12.RelatedInstrumentGrp";
14514
14515 i64_Print(row.RelatedSecurityID, temp);
14516 PrintAttrSpaceReset(str,"RelatedSecurityID", temp);
14517
14518 algo::strptr_Print(RelatedSecurityIDSource_Get(row), temp);
14519 PrintAttrSpaceReset(str,"RelatedSecurityIDSource", temp);
14520}
14521
14522// --- emdi12.RelatedInstrumentGrp..FastEncode
14523void emdi12::RelatedInstrumentGrp_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::RelatedInstrumentGrp& parent) {
14524 // RelatedSecurityID signed delta mandatory
14525 if (!RelatedSecurityID_AssignedQ(state)) {
14526 RelatedSecurityID_SetAssigned(state);
14527 state.RelatedSecurityID = 0;
14528 }
14529 lib_fast::EncodeDeltaSigned(buf,state.RelatedSecurityID,parent.RelatedSecurityID,false);
14530 state.RelatedSecurityID = parent.RelatedSecurityID;
14531 // RelatedSecurityIDSource string constant mandatory
14532}
14533
14534// --- emdi12.RelatedInstrumentGrp..FastDecode
14535bool emdi12::RelatedInstrumentGrp_FastDecode(algo::memptr& from, FastState& state, emdi12::RelatedInstrumentGrp& parent) {
14536 bool ok = true;
14537 // RelatedSecurityID signed delta mandatory
14538 if (ok) {
14539 if (!RelatedSecurityID_AssignedQ(state)) {
14540 RelatedSecurityID_SetAssigned(state);
14541 state.RelatedSecurityID = 0;
14542 }
14543 ok = lib_fast::DecodeDeltaSigned(from,state.RelatedSecurityID,parent.RelatedSecurityID,false);
14544 if (!ok) {
14545 state.error << "emdi12.RelatedInstrumentGrp.RelatedSecurityID: bad Signed delta" << eol;
14546 }
14547 state.RelatedSecurityID = parent.RelatedSecurityID;
14548 }
14549 // RelatedSecurityIDSource string constant mandatory
14550 if (ok) {
14551 }
14552 return ok;
14553}
14554
14555// --- emdi12.RelatedInstrumentGrp..FixEncode
14556void emdi12::RelatedInstrumentGrp_FixEncode(cstring& buf, emdi12::RelatedInstrumentGrp& parent, char soh) {
14557 buf << "1650=" << parent.RelatedSecurityID << soh;
14558 buf << "1651=" << RelatedSecurityIDSource_Get(parent) << soh;
14559}
14560
14561// --- emdi12.Reset.base.CopyOut
14562// Copy fields out of row
14563void emdi12::parent_CopyOut(emdi12::Reset &row, emdi12::TemplateHeader &out) {
14564 // length: field value is computed
14565 // id: field value is computed
14566 (void)row;//only to avoid -Wunused-parameter
14567 (void)out;//only to avoid -Wunused-parameter
14568}
14569
14570// --- emdi12.Reset..ReadFieldMaybe
14571bool emdi12::Reset_ReadFieldMaybe(emdi12::Reset& parent, algo::strptr field, algo::strptr strval) {
14572 bool retval = true;
14573 emdi12::FieldId field_id;
14574 (void)value_SetStrptrMaybe(field_id,field);
14575 switch(field_id) {
14576 case emdi12_FieldId_base: {
14577 retval = false;
14578 break;
14579 }
14580 case emdi12_FieldId_length: {
14581 retval = false;
14582 break;
14583 }
14584 case emdi12_FieldId_id: {
14585 retval = false;
14586 break;
14587 }
14588 default: break;
14589 }
14590 if (!retval) {
14591 algo_lib::AppendErrtext("attr",field);
14592 }
14593 (void)parent;//only to avoid -Wunused-parameter
14594 (void)strval;//only to avoid -Wunused-parameter
14595 return retval;
14596}
14597
14598// --- emdi12.Reset..ReadStrptrMaybe
14599// Read fields of emdi12::Reset from an ascii string.
14600// The format of the string is an ssim Tuple
14601bool emdi12::Reset_ReadStrptrMaybe(emdi12::Reset &parent, algo::strptr in_str) {
14602 bool retval = true;
14603 retval = algo::StripTypeTag(in_str, "emdi12.Reset");
14604 ind_beg(algo::Attr_curs, attr, in_str) {
14605 retval = retval && Reset_ReadFieldMaybe(parent, attr.name, attr.value);
14606 }ind_end;
14607 return retval;
14608}
14609
14610// --- emdi12.Reset..Print
14611// print string representation of ROW to string STR
14612// cfmt:emdi12.Reset.String printfmt:Tuple
14613void emdi12::Reset_Print(emdi12::Reset& row, algo::cstring& str) {
14614 algo::tempstr temp;
14615 str << "emdi12.Reset";
14616 (void)row;//only to avoid -Wunused-parameter
14617}
14618
14619// --- emdi12.Reset..FastEncode
14620void emdi12::Reset_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::Reset& parent) {
14621 int index = ary_N(buf);
14622 u64 pmap(0);
14623 if (!tid_AssignedQ(state) || parent.id != state.tid) {
14624 lib_fast::EncodeUnsigned(buf,parent.id,false);
14625 lib_fast::SetPmapBit(pmap,0);
14626 }
14627 tid_SetAssigned(state);
14628 state.tid = parent.id;
14629 lib_fast::InsertPmap(buf,index,pmap);
14630}
14631
14632// --- emdi12.Reset..FastDecode
14633bool emdi12::Reset_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::Reset& parent) {
14634 bool ok = true;
14635 (void)from;//only to avoid -Wunused-parameter
14636 (void)pmap;//only to avoid -Wunused-parameter
14637 (void)state;//only to avoid -Wunused-parameter
14638 (void)parent;//only to avoid -Wunused-parameter
14639 return ok;
14640}
14641
14642// --- emdi12.Reset..FixEncode
14643void emdi12::Reset_FixEncode(cstring& buf, emdi12::Reset& parent, char soh) {
14644 (void)buf;//only to avoid -Wunused-parameter
14645 (void)parent;//only to avoid -Wunused-parameter
14646 (void)soh;//only to avoid -Wunused-parameter
14647}
14648
14649// --- emdi12.ScaledSimpleInstrumentUpdate.base.CopyOut
14650// Copy fields out of row
14651void emdi12::parent_CopyOut(emdi12::ScaledSimpleInstrumentUpdate &row, emdi12::TemplateHeader &out) {
14652 // length: field value is computed
14653 // id: field value is computed
14654 (void)row;//only to avoid -Wunused-parameter
14655 (void)out;//only to avoid -Wunused-parameter
14656}
14657
14658// --- emdi12.ScaledSimpleInstrumentUpdate..ReadFieldMaybe
14659bool emdi12::ScaledSimpleInstrumentUpdate_ReadFieldMaybe(emdi12::ScaledSimpleInstrumentUpdate& parent, algo::strptr field, algo::strptr strval) {
14660 bool retval = true;
14661 emdi12::FieldId field_id;
14662 (void)value_SetStrptrMaybe(field_id,field);
14663 switch(field_id) {
14664 case emdi12_FieldId_base: {
14665 retval = false;
14666 break;
14667 }
14668 case emdi12_FieldId_length: {
14669 retval = false;
14670 break;
14671 }
14672 case emdi12_FieldId_id: {
14673 retval = false;
14674 break;
14675 }
14676 case emdi12_FieldId_MsgType: {
14677 retval = true;
14678 break;
14679 }
14680 case emdi12_FieldId_MsgSeqNum: {
14681 retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, strval);
14682 break;
14683 }
14684 case emdi12_FieldId_SenderCompID: {
14685 retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
14686 break;
14687 }
14688 case emdi12_FieldId_SecurityUpdateAction: {
14689 retval = true;
14690 break;
14691 }
14692 case emdi12_FieldId_SecurityID: {
14693 retval = i64_ReadStrptrMaybe(parent.SecurityID, strval);
14694 break;
14695 }
14696 case emdi12_FieldId_SecurityIDSource: {
14697 retval = true;
14698 break;
14699 }
14700 case emdi12_FieldId_SecurityDesc: {
14701 retval = algo::Smallstr30_ReadStrptrMaybe(parent.SecurityDesc, strval);
14702 break;
14703 }
14704 case emdi12_FieldId_SecurityType: {
14705 retval = emdi12::SecurityType_ReadStrptrMaybe(parent.SecurityType, strval);
14706 break;
14707 }
14708 case emdi12_FieldId_ProductComplex: {
14709 retval = emdi12::ProductComplex_ReadStrptrMaybe(parent.ProductComplex, strval);
14710 break;
14711 }
14712 case emdi12_FieldId_QuantityScalingFactor: {
14713 retval = u32_ReadStrptrMaybe(parent.QuantityScalingFactor, strval);
14714 break;
14715 }
14716 case emdi12_FieldId_RelatedInstrumentGrp: {
14717 retval = emdi12::RelatedInstrumentGrp_ReadStrptrMaybe(parent.RelatedInstrumentGrp, strval);
14718 break;
14719 }
14720 case emdi12_FieldId_MarketSegmentGrp3: {
14721 retval = emdi12::MarketSegmentGrp3_ReadStrptrMaybe(parent.MarketSegmentGrp3, strval);
14722 break;
14723 }
14724 case emdi12_FieldId_TransactTime: {
14725 retval = i64_ReadStrptrMaybe(parent.TransactTime, strval);
14726 break;
14727 }
14728 default: break;
14729 }
14730 if (!retval) {
14731 algo_lib::AppendErrtext("attr",field);
14732 }
14733 return retval;
14734}
14735
14736// --- emdi12.ScaledSimpleInstrumentUpdate..ReadStrptrMaybe
14737// Read fields of emdi12::ScaledSimpleInstrumentUpdate from an ascii string.
14738// The format of the string is an ssim Tuple
14739bool emdi12::ScaledSimpleInstrumentUpdate_ReadStrptrMaybe(emdi12::ScaledSimpleInstrumentUpdate &parent, algo::strptr in_str) {
14740 bool retval = true;
14741 retval = algo::StripTypeTag(in_str, "emdi12.ScaledSimpleInstrumentUpdate");
14742 ind_beg(algo::Attr_curs, attr, in_str) {
14743 retval = retval && ScaledSimpleInstrumentUpdate_ReadFieldMaybe(parent, attr.name, attr.value);
14744 }ind_end;
14745 return retval;
14746}
14747
14748// --- emdi12.ScaledSimpleInstrumentUpdate..Init
14749// Set all fields to initial values.
14750void emdi12::ScaledSimpleInstrumentUpdate_Init(emdi12::ScaledSimpleInstrumentUpdate& parent) {
14751 parent.length = u32(ssizeof(parent) + (0));
14752 parent.id = u32(516);
14753 parent.MsgSeqNum = u32(0);
14754 parent.SenderCompID = u32(0);
14755 parent.SecurityID = i64(0);
14756 parent.QuantityScalingFactor = u32(0);
14757 parent.TransactTime = i64(0);
14758}
14759
14760// --- emdi12.ScaledSimpleInstrumentUpdate..Print
14761// print string representation of ROW to string STR
14762// cfmt:emdi12.ScaledSimpleInstrumentUpdate.String printfmt:Tuple
14763void emdi12::ScaledSimpleInstrumentUpdate_Print(emdi12::ScaledSimpleInstrumentUpdate& row, algo::cstring& str) {
14764 algo::tempstr temp;
14765 str << "emdi12.ScaledSimpleInstrumentUpdate";
14766
14767 algo::strptr_Print(MsgType_Get(row), temp);
14768 PrintAttrSpaceReset(str,"MsgType", temp);
14769
14770 u32_Print(row.MsgSeqNum, temp);
14771 PrintAttrSpaceReset(str,"MsgSeqNum", temp);
14772
14773 u32_Print(row.SenderCompID, temp);
14774 PrintAttrSpaceReset(str,"SenderCompID", temp);
14775
14776 algo::strptr_Print(SecurityUpdateAction_Get(row), temp);
14777 PrintAttrSpaceReset(str,"SecurityUpdateAction", temp);
14778
14779 i64_Print(row.SecurityID, temp);
14780 PrintAttrSpaceReset(str,"SecurityID", temp);
14781
14782 algo::strptr_Print(SecurityIDSource_Get(row), temp);
14783 PrintAttrSpaceReset(str,"SecurityIDSource", temp);
14784
14785 algo::Smallstr30_Print(row.SecurityDesc, temp);
14786 PrintAttrSpaceReset(str,"SecurityDesc", temp);
14787
14788 emdi12::SecurityType_Print(row.SecurityType, temp);
14789 PrintAttrSpaceReset(str,"SecurityType", temp);
14790
14791 emdi12::ProductComplex_Print(row.ProductComplex, temp);
14792 PrintAttrSpaceReset(str,"ProductComplex", temp);
14793
14794 u32_Print(row.QuantityScalingFactor, temp);
14795 PrintAttrSpaceReset(str,"QuantityScalingFactor", temp);
14796
14797 emdi12::RelatedInstrumentGrp_Print(row.RelatedInstrumentGrp, temp);
14798 PrintAttrSpaceReset(str,"RelatedInstrumentGrp", temp);
14799
14800 emdi12::MarketSegmentGrp3_Print(row.MarketSegmentGrp3, temp);
14801 PrintAttrSpaceReset(str,"MarketSegmentGrp3", temp);
14802
14803 i64_Print(row.TransactTime, temp);
14804 PrintAttrSpaceReset(str,"TransactTime", temp);
14805}
14806
14807// --- emdi12.ScaledSimpleInstrumentUpdate..FastEncode
14808void emdi12::ScaledSimpleInstrumentUpdate_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::ScaledSimpleInstrumentUpdate& parent) {
14809 int index = ary_N(buf);
14810 u64 pmap(0);
14811 if (!tid_AssignedQ(state) || parent.id != state.tid) {
14812 lib_fast::EncodeUnsigned(buf,parent.id,false);
14813 lib_fast::SetPmapBit(pmap,0);
14814 }
14815 tid_SetAssigned(state);
14816 state.tid = parent.id;
14817 // MsgType string constant mandatory
14818 // MsgSeqNum unsigned increment mandatory
14819 if (MsgSeqNum_AssignedQ(state)) {
14820 if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
14821 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
14822 lib_fast::SetPmapBit(pmap,1);
14823 }
14824 } else {
14825 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
14826 lib_fast::SetPmapBit(pmap,1);
14827 }
14828 state.MsgSeqNum = parent.MsgSeqNum;
14829 MsgSeqNum_SetAssigned(state);
14830 // SenderCompID unsigned copy mandatory
14831 if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
14832 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
14833 lib_fast::SetPmapBit(pmap,2);
14834 }
14835 state.SenderCompID = parent.SenderCompID;
14836 SenderCompID_SetAssigned(state);
14837 // SecurityUpdateAction string constant mandatory
14838 // SecurityID signed none mandatory
14839 lib_fast::EncodeSigned(buf,parent.SecurityID,false);
14840 // SecurityIDSource string constant mandatory
14841 // SecurityDesc string none mandatory
14842 lib_fast::EncodeString(buf,parent.SecurityDesc,false);
14843 // SecurityType type none mandatory
14844 lib_fast::EncodeUnsigned(buf,parent.SecurityType.value,false);
14845 // ProductComplex type none mandatory
14846 lib_fast::EncodeUnsigned(buf,parent.ProductComplex.value,false);
14847 // QuantityScalingFactor unsigned none mandatory
14848 lib_fast::EncodeUnsigned(buf,parent.QuantityScalingFactor,false);
14849 // RelatedInstrumentGrp group none mandatory
14850 RelatedInstrumentGrp_FastEncode(buf,state,parent.RelatedInstrumentGrp);
14851 // MarketSegmentGrp3 sequence none mandatory
14852 MarketSegmentGrp3_FastEncode(buf,state,parent.MarketSegmentGrp3);
14853 // TransactTime signed none mandatory
14854 lib_fast::EncodeSigned(buf,parent.TransactTime,false);
14855 lib_fast::InsertPmap(buf,index,pmap);
14856}
14857
14858// --- emdi12.ScaledSimpleInstrumentUpdate..FastDecode
14859bool emdi12::ScaledSimpleInstrumentUpdate_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::ScaledSimpleInstrumentUpdate& parent) {
14860 bool ok = true;
14861 // MsgType string constant mandatory
14862 if (ok) {
14863 }
14864 // MsgSeqNum unsigned increment mandatory
14865 if (ok) {
14866 bool prs = lib_fast::GetPmapBit(pmap,1);
14867 if (prs) {
14868 ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
14869 if (!ok) {
14870 state.error << "emdi12.ScaledSimpleInstrumentUpdate.MsgSeqNum: bad Unsigned" << eol;
14871 }
14872 } else if (MsgSeqNum_AssignedQ(state)) {
14873 parent.MsgSeqNum = state.MsgSeqNum + 1;
14874 } else {
14875 ok = false;
14876 state.error << "emdi12.ScaledSimpleInstrumentUpdate.MsgSeqNum: increment operator: previous value unassigned" << eol;
14877 }
14878 MsgSeqNum_SetAssigned(state);
14879 state.MsgSeqNum = parent.MsgSeqNum;
14880 }
14881 // SenderCompID unsigned copy mandatory
14882 if (ok) {
14883 bool prs = lib_fast::GetPmapBit(pmap,2);
14884 if (prs) {
14885 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
14886 if (!ok) {
14887 state.error << "emdi12.ScaledSimpleInstrumentUpdate.SenderCompID: bad Unsigned" << eol;
14888 }
14889 } else if (SenderCompID_AssignedQ(state)) {
14890 parent.SenderCompID = state.SenderCompID;
14891 } else {
14892 ok = false;
14893 state.error << "emdi12.ScaledSimpleInstrumentUpdate.SenderCompID: copy operator: previous value unassigned" << eol;
14894 }
14895 SenderCompID_SetAssigned(state);
14896 state.SenderCompID = parent.SenderCompID;
14897 }
14898 // SecurityUpdateAction string constant mandatory
14899 if (ok) {
14900 }
14901 // SecurityID signed none mandatory
14902 if (ok) {
14903 ok = lib_fast::DecodeSigned(from,parent.SecurityID,false);
14904 if (!ok) {
14905 state.error << "emdi12.ScaledSimpleInstrumentUpdate.SecurityID: bad Signed" << eol;
14906 }
14907 }
14908 // SecurityIDSource string constant mandatory
14909 if (ok) {
14910 }
14911 // SecurityDesc string none mandatory
14912 if (ok) {
14913 ok = lib_fast::DecodeString(from,parent.SecurityDesc,false);
14914 if (!ok) {
14915 state.error << "emdi12.ScaledSimpleInstrumentUpdate.SecurityDesc: bad String" << eol;
14916 }
14917 }
14918 // SecurityType type none mandatory
14919 if (ok) {
14920 ok = lib_fast::DecodeUnsigned(from,parent.SecurityType.value,false);
14921 if (!ok) {
14922 state.error << "emdi12.ScaledSimpleInstrumentUpdate.SecurityType: bad Unsigned" << eol;
14923 }
14924 }
14925 // ProductComplex type none mandatory
14926 if (ok) {
14927 ok = lib_fast::DecodeUnsigned(from,parent.ProductComplex.value,false);
14928 if (!ok) {
14929 state.error << "emdi12.ScaledSimpleInstrumentUpdate.ProductComplex: bad Unsigned" << eol;
14930 }
14931 }
14932 // QuantityScalingFactor unsigned none mandatory
14933 if (ok) {
14934 ok = lib_fast::DecodeUnsigned(from,parent.QuantityScalingFactor,false);
14935 if (!ok) {
14936 state.error << "emdi12.ScaledSimpleInstrumentUpdate.QuantityScalingFactor: bad Unsigned" << eol;
14937 }
14938 }
14939 // RelatedInstrumentGrp group none mandatory
14940 if (ok) {
14941 ok = RelatedInstrumentGrp_FastDecode(from,state,parent.RelatedInstrumentGrp);
14942 }
14943 // MarketSegmentGrp3 sequence none mandatory
14944 if (ok) {
14945 ok = MarketSegmentGrp3_FastDecode(from,state,parent.MarketSegmentGrp3);
14946 }
14947 // TransactTime signed none mandatory
14948 if (ok) {
14949 ok = lib_fast::DecodeSigned(from,parent.TransactTime,false);
14950 if (!ok) {
14951 state.error << "emdi12.ScaledSimpleInstrumentUpdate.TransactTime: bad Signed" << eol;
14952 }
14953 }
14954 return ok;
14955}
14956
14957// --- emdi12.ScaledSimpleInstrumentUpdate..FixEncode
14958void emdi12::ScaledSimpleInstrumentUpdate_FixEncode(cstring& buf, emdi12::ScaledSimpleInstrumentUpdate& parent, char soh) {
14959 buf << "35=" << MsgType_Get(parent) << soh;
14960 buf << "34=" << parent.MsgSeqNum << soh;
14961 buf << "49=" << parent.SenderCompID << soh;
14962 buf << "980=" << SecurityUpdateAction_Get(parent) << soh;
14963 buf << "48=" << parent.SecurityID << soh;
14964 buf << "22=" << SecurityIDSource_Get(parent) << soh;
14965 buf << "107=" << parent.SecurityDesc << soh;
14966 buf << "167=" << parent.SecurityType << soh;
14967 buf << "1227=" << parent.ProductComplex << soh;
14968 buf << "28907=" << parent.QuantityScalingFactor << soh;
14969 RelatedInstrumentGrp_FixEncode(buf,parent.RelatedInstrumentGrp, soh);
14970 buf << "1310=1" << soh;
14971 buf << "60=" << parent.TransactTime << soh;
14972}
14973
14974// --- emdi12.TemplateHeader.id.ToCstr
14975// Convert numeric value of field to one of predefined string constants.
14976// If string is found, return a static C string. Otherwise, return NULL.
14977const char* emdi12::id_ToCstr(const emdi12::TemplateHeader& parent) {
14978 const char *ret = NULL;
14979 switch(id_GetEnum(parent)) {
14980 case emdi12_TemplateHeader_id_emdi12_Beacon: ret = "emdi12.Beacon"; break;
14981 case emdi12_TemplateHeader_id_emdi12_ComplexInstrumentUpdate: ret = "emdi12.ComplexInstrumentUpdate"; break;
14982 case emdi12_TemplateHeader_id_emdi12_CrossRequest: ret = "emdi12.CrossRequest"; break;
14983 case emdi12_TemplateHeader_id_emdi12_DepthIncremental: ret = "emdi12.DepthIncremental"; break;
14984 case emdi12_TemplateHeader_id_emdi12_DepthSnapshot: ret = "emdi12.DepthSnapshot"; break;
14985 case emdi12_TemplateHeader_id_emdi12_EMDPacketHeader: ret = "emdi12.EMDPacketHeader"; break;
14986 case emdi12_TemplateHeader_id_emdi12_FlexibleInstrumentUpdate: ret = "emdi12.FlexibleInstrumentUpdate"; break;
14987 case emdi12_TemplateHeader_id_emdi12_InstrumentStateChange: ret = "emdi12.InstrumentStateChange"; break;
14988 case emdi12_TemplateHeader_id_emdi12_MassInstrumentStateChange: ret = "emdi12.MassInstrumentStateChange"; break;
14989 case emdi12_TemplateHeader_id_emdi12_ProductStateChange: ret = "emdi12.ProductStateChange"; break;
14990 case emdi12_TemplateHeader_id_emdi12_QuoteRequest: ret = "emdi12.QuoteRequest"; break;
14991 case emdi12_TemplateHeader_id_emdi12_Reset: ret = "emdi12.Reset"; break;
14992 case emdi12_TemplateHeader_id_emdi12_ScaledSimpleInstrumentUpdate: ret = "emdi12.ScaledSimpleInstrumentUpdate"; break;
14993 case emdi12_TemplateHeader_id_emdi12_TopOfBookImplied: ret = "emdi12.TopOfBookImplied"; break;
14994 }
14995 return ret;
14996}
14997
14998// --- emdi12.TemplateHeader.id.Print
14999// Convert id to a string. First, attempt conversion to a known string.
15000// If no string matches, print id as a numeric value.
15001void emdi12::id_Print(const emdi12::TemplateHeader& parent, algo::cstring &lhs) {
15002 const char *strval = id_ToCstr(parent);
15003 if (strval) {
15004 lhs << strval;
15005 } else {
15006 lhs << parent.id;
15007 }
15008}
15009
15010// --- emdi12.TemplateHeader.id.SetStrptrMaybe
15011// Convert string to field.
15012// If the string is invalid, do not modify field and return false.
15013// In case of success, return true
15014bool emdi12::id_SetStrptrMaybe(emdi12::TemplateHeader& parent, algo::strptr rhs) {
15015 bool ret = false;
15016 switch (elems_N(rhs)) {
15017 case 12: {
15018 switch (algo::ReadLE64(rhs.elems)) {
15019 case LE_STR8('e','m','d','i','1','2','.','R'): {
15020 if (memcmp(rhs.elems+8,"eset",4)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_Reset); ret = true; break; }
15021 break;
15022 }
15023 }
15024 break;
15025 }
15026 case 13: {
15027 switch (algo::ReadLE64(rhs.elems)) {
15028 case LE_STR8('e','m','d','i','1','2','.','B'): {
15029 if (memcmp(rhs.elems+8,"eacon",5)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_Beacon); ret = true; break; }
15030 break;
15031 }
15032 }
15033 break;
15034 }
15035 case 19: {
15036 switch (algo::ReadLE64(rhs.elems)) {
15037 case LE_STR8('e','m','d','i','1','2','.','C'): {
15038 if (memcmp(rhs.elems+8,"rossRequest",11)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_CrossRequest); ret = true; break; }
15039 break;
15040 }
15041 case LE_STR8('e','m','d','i','1','2','.','Q'): {
15042 if (memcmp(rhs.elems+8,"uoteRequest",11)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_QuoteRequest); ret = true; break; }
15043 break;
15044 }
15045 }
15046 break;
15047 }
15048 case 20: {
15049 switch (algo::ReadLE64(rhs.elems)) {
15050 case LE_STR8('e','m','d','i','1','2','.','D'): {
15051 if (memcmp(rhs.elems+8,"epthSnapshot",12)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_DepthSnapshot); ret = true; break; }
15052 break;
15053 }
15054 }
15055 break;
15056 }
15057 case 22: {
15058 switch (algo::ReadLE64(rhs.elems)) {
15059 case LE_STR8('e','m','d','i','1','2','.','E'): {
15060 if (memcmp(rhs.elems+8,"MDPacketHeader",14)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_EMDPacketHeader); ret = true; break; }
15061 break;
15062 }
15063 }
15064 break;
15065 }
15066 case 23: {
15067 switch (algo::ReadLE64(rhs.elems)) {
15068 case LE_STR8('e','m','d','i','1','2','.','D'): {
15069 if (memcmp(rhs.elems+8,"epthIncremental",15)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_DepthIncremental); ret = true; break; }
15070 break;
15071 }
15072 case LE_STR8('e','m','d','i','1','2','.','T'): {
15073 if (memcmp(rhs.elems+8,"opOfBookImplied",15)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_TopOfBookImplied); ret = true; break; }
15074 break;
15075 }
15076 }
15077 break;
15078 }
15079 case 25: {
15080 switch (algo::ReadLE64(rhs.elems)) {
15081 case LE_STR8('e','m','d','i','1','2','.','P'): {
15082 if (memcmp(rhs.elems+8,"roductStateChange",17)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_ProductStateChange); ret = true; break; }
15083 break;
15084 }
15085 }
15086 break;
15087 }
15088 case 28: {
15089 switch (algo::ReadLE64(rhs.elems)) {
15090 case LE_STR8('e','m','d','i','1','2','.','I'): {
15091 if (memcmp(rhs.elems+8,"nstrumentStateChange",20)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_InstrumentStateChange); ret = true; break; }
15092 break;
15093 }
15094 }
15095 break;
15096 }
15097 case 30: {
15098 switch (algo::ReadLE64(rhs.elems)) {
15099 case LE_STR8('e','m','d','i','1','2','.','C'): {
15100 if (memcmp(rhs.elems+8,"omplexInstrumentUpdate",22)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_ComplexInstrumentUpdate); ret = true; break; }
15101 break;
15102 }
15103 }
15104 break;
15105 }
15106 case 31: {
15107 switch (algo::ReadLE64(rhs.elems)) {
15108 case LE_STR8('e','m','d','i','1','2','.','F'): {
15109 if (memcmp(rhs.elems+8,"lexibleInstrumentUpdate",23)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_FlexibleInstrumentUpdate); ret = true; break; }
15110 break;
15111 }
15112 }
15113 break;
15114 }
15115 case 32: {
15116 switch (algo::ReadLE64(rhs.elems)) {
15117 case LE_STR8('e','m','d','i','1','2','.','M'): {
15118 if (memcmp(rhs.elems+8,"assInstrumentStateChange",24)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_MassInstrumentStateChange); ret = true; break; }
15119 break;
15120 }
15121 }
15122 break;
15123 }
15124 case 35: {
15125 switch (algo::ReadLE64(rhs.elems)) {
15126 case LE_STR8('e','m','d','i','1','2','.','S'): {
15127 if (memcmp(rhs.elems+8,"caledSimpleInstrumentUpdate",27)==0) { id_SetEnum(parent,emdi12_TemplateHeader_id_emdi12_ScaledSimpleInstrumentUpdate); ret = true; break; }
15128 break;
15129 }
15130 }
15131 break;
15132 }
15133 }
15134 return ret;
15135}
15136
15137// --- emdi12.TemplateHeader.id.SetStrptr
15138// Convert string to field.
15139// If the string is invalid, set numeric value to DFLT
15140void emdi12::id_SetStrptr(emdi12::TemplateHeader& parent, algo::strptr rhs, emdi12_TemplateHeader_id_Enum dflt) {
15141 if (!id_SetStrptrMaybe(parent,rhs)) id_SetEnum(parent,dflt);
15142}
15143
15144// --- emdi12.TemplateHeader.id.ReadStrptrMaybe
15145// Convert string to field. Return success value
15146bool emdi12::id_ReadStrptrMaybe(emdi12::TemplateHeader& parent, algo::strptr rhs) {
15147 bool retval = false;
15148 retval = id_SetStrptrMaybe(parent,rhs); // try symbol conversion
15149 if (!retval) { // didn't work? try reading as underlying type
15150 retval = u32_ReadStrptrMaybe(parent.id,rhs);
15151 }
15152 return retval;
15153}
15154
15155// --- emdi12.TemplateHeader..ReadFieldMaybe
15156bool emdi12::TemplateHeader_ReadFieldMaybe(emdi12::TemplateHeader& parent, algo::strptr field, algo::strptr strval) {
15157 bool retval = true;
15158 emdi12::FieldId field_id;
15159 (void)value_SetStrptrMaybe(field_id,field);
15160 switch(field_id) {
15161 case emdi12_FieldId_length: {
15162 retval = false;
15163 break;
15164 }
15165 case emdi12_FieldId_id: {
15166 retval = id_ReadStrptrMaybe(parent, strval);
15167 break;
15168 }
15169 default: break;
15170 }
15171 if (!retval) {
15172 algo_lib::AppendErrtext("attr",field);
15173 }
15174 return retval;
15175}
15176
15177// --- emdi12.TemplateHeader..ReadStrptrMaybe
15178// Read fields of emdi12::TemplateHeader from an ascii string.
15179// The format of the string is an ssim Tuple
15180bool emdi12::TemplateHeader_ReadStrptrMaybe(emdi12::TemplateHeader &parent, algo::strptr in_str) {
15181 bool retval = true;
15182 retval = algo::StripTypeTag(in_str, "emdi12.TemplateHeader");
15183 ind_beg(algo::Attr_curs, attr, in_str) {
15184 retval = retval && TemplateHeader_ReadFieldMaybe(parent, attr.name, attr.value);
15185 }ind_end;
15186 return retval;
15187}
15188
15189// --- emdi12.TemplateHeader..Print
15190// print string representation of ROW to string STR
15191// cfmt:emdi12.TemplateHeader.String printfmt:Tuple
15192void emdi12::TemplateHeader_Print(emdi12::TemplateHeader& row, algo::cstring& str) {
15193 algo::tempstr temp;
15194 str << "emdi12.TemplateHeader";
15195 (void)row;//only to avoid -Wunused-parameter
15196}
15197
15198// --- emdi12.TemplateHeaderMsgsCase.value.ToCstr
15199// Convert numeric value of field to one of predefined string constants.
15200// If string is found, return a static C string. Otherwise, return NULL.
15201const char* emdi12::value_ToCstr(const emdi12::TemplateHeaderMsgsCase& parent) {
15202 const char *ret = NULL;
15203 switch(value_GetEnum(parent)) {
15204 case emdi12_TemplateHeaderMsgsCase_emdi12_Beacon: ret = "emdi12.Beacon"; break;
15205 case emdi12_TemplateHeaderMsgsCase_emdi12_ComplexInstrumentUpdate: ret = "emdi12.ComplexInstrumentUpdate"; break;
15206 case emdi12_TemplateHeaderMsgsCase_emdi12_CrossRequest: ret = "emdi12.CrossRequest"; break;
15207 case emdi12_TemplateHeaderMsgsCase_emdi12_DepthIncremental: ret = "emdi12.DepthIncremental"; break;
15208 case emdi12_TemplateHeaderMsgsCase_emdi12_DepthSnapshot: ret = "emdi12.DepthSnapshot"; break;
15209 case emdi12_TemplateHeaderMsgsCase_emdi12_EMDPacketHeader: ret = "emdi12.EMDPacketHeader"; break;
15210 case emdi12_TemplateHeaderMsgsCase_emdi12_FlexibleInstrumentUpdate: ret = "emdi12.FlexibleInstrumentUpdate"; break;
15211 case emdi12_TemplateHeaderMsgsCase_emdi12_InstrumentStateChange: ret = "emdi12.InstrumentStateChange"; break;
15212 case emdi12_TemplateHeaderMsgsCase_emdi12_MassInstrumentStateChange: ret = "emdi12.MassInstrumentStateChange"; break;
15213 case emdi12_TemplateHeaderMsgsCase_emdi12_ProductStateChange: ret = "emdi12.ProductStateChange"; break;
15214 case emdi12_TemplateHeaderMsgsCase_emdi12_QuoteRequest: ret = "emdi12.QuoteRequest"; break;
15215 case emdi12_TemplateHeaderMsgsCase_emdi12_Reset: ret = "emdi12.Reset"; break;
15216 case emdi12_TemplateHeaderMsgsCase_emdi12_ScaledSimpleInstrumentUpdate: ret = "emdi12.ScaledSimpleInstrumentUpdate"; break;
15217 case emdi12_TemplateHeaderMsgsCase_emdi12_TopOfBookImplied: ret = "emdi12.TopOfBookImplied"; break;
15218 }
15219 return ret;
15220}
15221
15222// --- emdi12.TemplateHeaderMsgsCase.value.Print
15223// Convert value to a string. First, attempt conversion to a known string.
15224// If no string matches, print value as a numeric value.
15225void emdi12::value_Print(const emdi12::TemplateHeaderMsgsCase& parent, algo::cstring &lhs) {
15226 const char *strval = value_ToCstr(parent);
15227 if (strval) {
15228 lhs << strval;
15229 } else {
15230 lhs << parent.value;
15231 }
15232}
15233
15234// --- emdi12.TemplateHeaderMsgsCase.value.SetStrptrMaybe
15235// Convert string to field.
15236// If the string is invalid, do not modify field and return false.
15237// In case of success, return true
15238bool emdi12::value_SetStrptrMaybe(emdi12::TemplateHeaderMsgsCase& parent, algo::strptr rhs) {
15239 bool ret = false;
15240 switch (elems_N(rhs)) {
15241 case 12: {
15242 switch (algo::ReadLE64(rhs.elems)) {
15243 case LE_STR8('e','m','d','i','1','2','.','R'): {
15244 if (memcmp(rhs.elems+8,"eset",4)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_Reset); ret = true; break; }
15245 break;
15246 }
15247 }
15248 break;
15249 }
15250 case 13: {
15251 switch (algo::ReadLE64(rhs.elems)) {
15252 case LE_STR8('e','m','d','i','1','2','.','B'): {
15253 if (memcmp(rhs.elems+8,"eacon",5)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_Beacon); ret = true; break; }
15254 break;
15255 }
15256 }
15257 break;
15258 }
15259 case 19: {
15260 switch (algo::ReadLE64(rhs.elems)) {
15261 case LE_STR8('e','m','d','i','1','2','.','C'): {
15262 if (memcmp(rhs.elems+8,"rossRequest",11)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_CrossRequest); ret = true; break; }
15263 break;
15264 }
15265 case LE_STR8('e','m','d','i','1','2','.','Q'): {
15266 if (memcmp(rhs.elems+8,"uoteRequest",11)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_QuoteRequest); ret = true; break; }
15267 break;
15268 }
15269 }
15270 break;
15271 }
15272 case 20: {
15273 switch (algo::ReadLE64(rhs.elems)) {
15274 case LE_STR8('e','m','d','i','1','2','.','D'): {
15275 if (memcmp(rhs.elems+8,"epthSnapshot",12)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_DepthSnapshot); ret = true; break; }
15276 break;
15277 }
15278 }
15279 break;
15280 }
15281 case 22: {
15282 switch (algo::ReadLE64(rhs.elems)) {
15283 case LE_STR8('e','m','d','i','1','2','.','E'): {
15284 if (memcmp(rhs.elems+8,"MDPacketHeader",14)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_EMDPacketHeader); ret = true; break; }
15285 break;
15286 }
15287 }
15288 break;
15289 }
15290 case 23: {
15291 switch (algo::ReadLE64(rhs.elems)) {
15292 case LE_STR8('e','m','d','i','1','2','.','D'): {
15293 if (memcmp(rhs.elems+8,"epthIncremental",15)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_DepthIncremental); ret = true; break; }
15294 break;
15295 }
15296 case LE_STR8('e','m','d','i','1','2','.','T'): {
15297 if (memcmp(rhs.elems+8,"opOfBookImplied",15)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_TopOfBookImplied); ret = true; break; }
15298 break;
15299 }
15300 }
15301 break;
15302 }
15303 case 25: {
15304 switch (algo::ReadLE64(rhs.elems)) {
15305 case LE_STR8('e','m','d','i','1','2','.','P'): {
15306 if (memcmp(rhs.elems+8,"roductStateChange",17)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_ProductStateChange); ret = true; break; }
15307 break;
15308 }
15309 }
15310 break;
15311 }
15312 case 28: {
15313 switch (algo::ReadLE64(rhs.elems)) {
15314 case LE_STR8('e','m','d','i','1','2','.','I'): {
15315 if (memcmp(rhs.elems+8,"nstrumentStateChange",20)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_InstrumentStateChange); ret = true; break; }
15316 break;
15317 }
15318 }
15319 break;
15320 }
15321 case 30: {
15322 switch (algo::ReadLE64(rhs.elems)) {
15323 case LE_STR8('e','m','d','i','1','2','.','C'): {
15324 if (memcmp(rhs.elems+8,"omplexInstrumentUpdate",22)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_ComplexInstrumentUpdate); ret = true; break; }
15325 break;
15326 }
15327 }
15328 break;
15329 }
15330 case 31: {
15331 switch (algo::ReadLE64(rhs.elems)) {
15332 case LE_STR8('e','m','d','i','1','2','.','F'): {
15333 if (memcmp(rhs.elems+8,"lexibleInstrumentUpdate",23)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_FlexibleInstrumentUpdate); ret = true; break; }
15334 break;
15335 }
15336 }
15337 break;
15338 }
15339 case 32: {
15340 switch (algo::ReadLE64(rhs.elems)) {
15341 case LE_STR8('e','m','d','i','1','2','.','M'): {
15342 if (memcmp(rhs.elems+8,"assInstrumentStateChange",24)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_MassInstrumentStateChange); ret = true; break; }
15343 break;
15344 }
15345 }
15346 break;
15347 }
15348 case 35: {
15349 switch (algo::ReadLE64(rhs.elems)) {
15350 case LE_STR8('e','m','d','i','1','2','.','S'): {
15351 if (memcmp(rhs.elems+8,"caledSimpleInstrumentUpdate",27)==0) { value_SetEnum(parent,emdi12_TemplateHeaderMsgsCase_emdi12_ScaledSimpleInstrumentUpdate); ret = true; break; }
15352 break;
15353 }
15354 }
15355 break;
15356 }
15357 }
15358 return ret;
15359}
15360
15361// --- emdi12.TemplateHeaderMsgsCase.value.SetStrptr
15362// Convert string to field.
15363// If the string is invalid, set numeric value to DFLT
15364void emdi12::value_SetStrptr(emdi12::TemplateHeaderMsgsCase& parent, algo::strptr rhs, emdi12_TemplateHeaderMsgsCaseEnum dflt) {
15365 if (!value_SetStrptrMaybe(parent,rhs)) value_SetEnum(parent,dflt);
15366}
15367
15368// --- emdi12.TemplateHeaderMsgsCase.value.ReadStrptrMaybe
15369// Convert string to field. Return success value
15370bool emdi12::value_ReadStrptrMaybe(emdi12::TemplateHeaderMsgsCase& parent, algo::strptr rhs) {
15371 bool retval = false;
15372 retval = value_SetStrptrMaybe(parent,rhs); // try symbol conversion
15373 if (!retval) { // didn't work? try reading as underlying type
15374 retval = u32_ReadStrptrMaybe(parent.value,rhs);
15375 }
15376 return retval;
15377}
15378
15379// --- emdi12.TemplateHeaderMsgsCase..ReadStrptrMaybe
15380// Read fields of emdi12::TemplateHeaderMsgsCase from an ascii string.
15381// The format of the string is the format of the emdi12::TemplateHeaderMsgsCase's only field
15382bool emdi12::TemplateHeaderMsgsCase_ReadStrptrMaybe(emdi12::TemplateHeaderMsgsCase &parent, algo::strptr in_str) {
15383 bool retval = true;
15384 retval = retval && value_ReadStrptrMaybe(parent, in_str);
15385 return retval;
15386}
15387
15388// --- emdi12.TopOfBookImplied.base.CopyOut
15389// Copy fields out of row
15390void emdi12::parent_CopyOut(emdi12::TopOfBookImplied &row, emdi12::TemplateHeader &out) {
15391 // length: field value is computed
15392 // id: field value is computed
15393 (void)row;//only to avoid -Wunused-parameter
15394 (void)out;//only to avoid -Wunused-parameter
15395}
15396
15397// --- emdi12.TopOfBookImplied.MDIncGrp2.Getary
15398// Access var-length portion as an aryptr. Length is determined from one of the fields.
15399algo::aryptr<emdi12::MDIncGrp2> emdi12::MDIncGrp2_Getary(emdi12::TopOfBookImplied& parent) {
15400 return algo::aryptr<emdi12::MDIncGrp2>(MDIncGrp2_Addr(parent), MDIncGrp2_N(parent));
15401}
15402
15403// --- emdi12.TopOfBookImplied.MDIncGrp2.Addr
15404emdi12::MDIncGrp2* emdi12::MDIncGrp2_Addr(emdi12::TopOfBookImplied& parent) {
15405 return (emdi12::MDIncGrp2*)((u8*)&parent + sizeof(emdi12::TopOfBookImplied)); // address of varlen portion
15406}
15407
15408// --- emdi12.TopOfBookImplied.MDIncGrp2.ReadStrptrMaybe
15409// Convert string to field. Return success value
15410bool emdi12::MDIncGrp2_ReadStrptrMaybe(emdi12::TopOfBookImplied& parent, algo::strptr in_str) {
15411 bool retval = true;
15412 if (algo_lib::_db.varlenbuf) {
15413 emdi12::MDIncGrp2 *MDIncGrp2_tmp = new(ary_AllocN(*algo_lib::_db.varlenbuf, sizeof(emdi12::MDIncGrp2)).elems) emdi12::MDIncGrp2;
15414 retval = emdi12::MDIncGrp2_ReadStrptrMaybe(*MDIncGrp2_tmp, in_str);
15415 }
15416 (void)parent;//only to avoid -Wunused-parameter
15417 return retval;
15418}
15419
15420// --- emdi12.TopOfBookImplied..ReadFieldMaybe
15421bool emdi12::TopOfBookImplied_ReadFieldMaybe(emdi12::TopOfBookImplied& parent, algo::strptr field, algo::strptr strval) {
15422 bool retval = true;
15423 emdi12::FieldId field_id;
15424 (void)value_SetStrptrMaybe(field_id,algo::Pathcomp(field, ".LL"));
15425 switch(field_id) {
15426 case emdi12_FieldId_base: {
15427 retval = false;
15428 break;
15429 }
15430 case emdi12_FieldId_length: {
15431 retval = false;
15432 break;
15433 }
15434 case emdi12_FieldId_id: {
15435 retval = false;
15436 break;
15437 }
15438 case emdi12_FieldId_MsgType: {
15439 retval = true;
15440 break;
15441 }
15442 case emdi12_FieldId_MsgSeqNum: {
15443 retval = u32_ReadStrptrMaybe(parent.MsgSeqNum, strval);
15444 break;
15445 }
15446 case emdi12_FieldId_SenderCompID: {
15447 retval = u32_ReadStrptrMaybe(parent.SenderCompID, strval);
15448 break;
15449 }
15450 case emdi12_FieldId_MarketSegmentID: {
15451 retval = u32_ReadStrptrMaybe(parent.MarketSegmentID, strval);
15452 break;
15453 }
15454 case emdi12_FieldId_MDIncGrp2: {
15455 retval = MDIncGrp2_ReadStrptrMaybe(parent, strval);
15456 break;
15457 }
15458 default: break;
15459 }
15460 if (!retval) {
15461 algo_lib::AppendErrtext("attr",field);
15462 }
15463 return retval;
15464}
15465
15466// --- emdi12.TopOfBookImplied..ReadStrptrMaybe
15467// Any varlen fields are returned in algo_lib::_db.varlenbuf if set
15468// Read fields of emdi12::TopOfBookImplied from an ascii string.
15469// The format of the string is an ssim Tuple
15470bool emdi12::TopOfBookImplied_ReadStrptrMaybe(emdi12::TopOfBookImplied &parent, algo::strptr in_str) {
15471 bool retval = true;
15472 retval = algo::StripTypeTag(in_str, "emdi12.TopOfBookImplied");
15473 ind_beg(algo::Attr_curs, attr, in_str) {
15474 retval = retval && TopOfBookImplied_ReadFieldMaybe(parent, attr.name, attr.value);
15475 }ind_end;
15476 return retval;
15477}
15478
15479// --- emdi12.TopOfBookImplied..Print
15480// print string representation of ROW to string STR
15481// cfmt:emdi12.TopOfBookImplied.String printfmt:Tuple
15482void emdi12::TopOfBookImplied_Print(emdi12::TopOfBookImplied& row, algo::cstring& str) {
15483 algo::tempstr temp;
15484 str << "emdi12.TopOfBookImplied";
15485
15486 algo::strptr_Print(MsgType_Get(row), temp);
15487 PrintAttrSpaceReset(str,"MsgType", temp);
15488
15489 u32_Print(row.MsgSeqNum, temp);
15490 PrintAttrSpaceReset(str,"MsgSeqNum", temp);
15491
15492 u32_Print(row.SenderCompID, temp);
15493 PrintAttrSpaceReset(str,"SenderCompID", temp);
15494
15495 u32_Print(row.MarketSegmentID, temp);
15496 PrintAttrSpaceReset(str,"MarketSegmentID", temp);
15497
15498 ind_beg(TopOfBookImplied_MDIncGrp2_curs,MDIncGrp2,row) {
15499 emdi12::MDIncGrp2_Print(MDIncGrp2, temp);
15500 tempstr name;
15501 name << "MDIncGrp2.";
15502 name << ind_curs(MDIncGrp2).index;
15503 PrintAttrSpaceReset(str, name, temp);
15504 }ind_end;
15505}
15506
15507// --- emdi12.TopOfBookImplied..FastEncode
15508void emdi12::TopOfBookImplied_FastEncode(algo::ByteAry& buf, FastState& state, emdi12::TopOfBookImplied& parent) {
15509 int index = ary_N(buf);
15510 u64 pmap(0);
15511 if (!tid_AssignedQ(state) || parent.id != state.tid) {
15512 lib_fast::EncodeUnsigned(buf,parent.id,false);
15513 lib_fast::SetPmapBit(pmap,0);
15514 }
15515 tid_SetAssigned(state);
15516 state.tid = parent.id;
15517 // MsgType string constant mandatory
15518 // MsgSeqNum unsigned increment mandatory
15519 if (MsgSeqNum_AssignedQ(state)) {
15520 if (parent.MsgSeqNum != state.MsgSeqNum + 1) {
15521 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
15522 lib_fast::SetPmapBit(pmap,1);
15523 }
15524 } else {
15525 lib_fast::EncodeUnsigned(buf,parent.MsgSeqNum,false);
15526 lib_fast::SetPmapBit(pmap,1);
15527 }
15528 state.MsgSeqNum = parent.MsgSeqNum;
15529 MsgSeqNum_SetAssigned(state);
15530 // SenderCompID unsigned copy mandatory
15531 if (!SenderCompID_AssignedQ(state) || parent.SenderCompID != state.SenderCompID) {
15532 lib_fast::EncodeUnsigned(buf,parent.SenderCompID,false);
15533 lib_fast::SetPmapBit(pmap,2);
15534 }
15535 state.SenderCompID = parent.SenderCompID;
15536 SenderCompID_SetAssigned(state);
15537 // MarketSegmentID unsigned copy mandatory
15538 if (!MarketSegmentID_AssignedQ(state) || parent.MarketSegmentID != state.MarketSegmentID) {
15539 lib_fast::EncodeUnsigned(buf,parent.MarketSegmentID,false);
15540 lib_fast::SetPmapBit(pmap,3);
15541 }
15542 state.MarketSegmentID = parent.MarketSegmentID;
15543 MarketSegmentID_SetAssigned(state);
15544 // MDIncGrp2 sequence none mandatory
15545 {
15546 u32 length = MDIncGrp2_N(parent);
15547 lib_fast::EncodeUnsigned(buf,length,false);
15548 ind_beg(TopOfBookImplied_MDIncGrp2_curs,elem,parent) {
15549 MDIncGrp2_FastEncode(buf,state,elem);
15550 }ind_end;
15551 }
15552 lib_fast::InsertPmap(buf,index,pmap);
15553}
15554
15555// --- emdi12.TopOfBookImplied..FastDecode
15556bool emdi12::TopOfBookImplied_FastDecode(algo::memptr& from, u64 pmap, FastState& state, emdi12::TopOfBookImplied& parent) {
15557 bool ok = true;
15558 // MsgType string constant mandatory
15559 if (ok) {
15560 }
15561 // MsgSeqNum unsigned increment mandatory
15562 if (ok) {
15563 bool prs = lib_fast::GetPmapBit(pmap,1);
15564 if (prs) {
15565 ok = lib_fast::DecodeUnsigned(from,parent.MsgSeqNum,false);
15566 if (!ok) {
15567 state.error << "emdi12.TopOfBookImplied.MsgSeqNum: bad Unsigned" << eol;
15568 }
15569 } else if (MsgSeqNum_AssignedQ(state)) {
15570 parent.MsgSeqNum = state.MsgSeqNum + 1;
15571 } else {
15572 ok = false;
15573 state.error << "emdi12.TopOfBookImplied.MsgSeqNum: increment operator: previous value unassigned" << eol;
15574 }
15575 MsgSeqNum_SetAssigned(state);
15576 state.MsgSeqNum = parent.MsgSeqNum;
15577 }
15578 // SenderCompID unsigned copy mandatory
15579 if (ok) {
15580 bool prs = lib_fast::GetPmapBit(pmap,2);
15581 if (prs) {
15582 ok = lib_fast::DecodeUnsigned(from,parent.SenderCompID,false);
15583 if (!ok) {
15584 state.error << "emdi12.TopOfBookImplied.SenderCompID: bad Unsigned" << eol;
15585 }
15586 } else if (SenderCompID_AssignedQ(state)) {
15587 parent.SenderCompID = state.SenderCompID;
15588 } else {
15589 ok = false;
15590 state.error << "emdi12.TopOfBookImplied.SenderCompID: copy operator: previous value unassigned" << eol;
15591 }
15592 SenderCompID_SetAssigned(state);
15593 state.SenderCompID = parent.SenderCompID;
15594 }
15595 // MarketSegmentID unsigned copy mandatory
15596 if (ok) {
15597 bool prs = lib_fast::GetPmapBit(pmap,3);
15598 if (prs) {
15599 ok = lib_fast::DecodeUnsigned(from,parent.MarketSegmentID,false);
15600 if (!ok) {
15601 state.error << "emdi12.TopOfBookImplied.MarketSegmentID: bad Unsigned" << eol;
15602 }
15603 } else if (MarketSegmentID_AssignedQ(state)) {
15604 parent.MarketSegmentID = state.MarketSegmentID;
15605 } else {
15606 ok = false;
15607 state.error << "emdi12.TopOfBookImplied.MarketSegmentID: copy operator: previous value unassigned" << eol;
15608 }
15609 MarketSegmentID_SetAssigned(state);
15610 state.MarketSegmentID = parent.MarketSegmentID;
15611 }
15612 // MDIncGrp2 sequence none mandatory
15613 if (ok) {
15614 u32 length(0);
15615 ok = lib_fast::DecodeUnsigned(from,length,false);
15616 if (!ok) {
15617 state.error << "emdi12.TopOfBookImplied.MDIncGrp2: bad Unsigned" << eol;
15618 }
15619 if (!ok) {
15620 state.error << "emdi12.TopOfBookImplied.MDIncGrp2: bad length" << eol;
15621 }
15622 for (unsigned i=0; ok && i<length; ++i) {
15623 MDIncGrp2 &seq = *new(ary_AllocN(lib_fast::_db.varlen,sizeof seq).elems) MDIncGrp2;
15624 ok = MDIncGrp2_FastDecode(from,state,seq);
15625 if (!ok) {
15626 state.error << "emdi12.TopOfBookImplied.MDIncGrp2: element #"<< i+1 << eol;
15627 }
15628 }
15629 }
15630 return ok;
15631}
15632
15633// --- emdi12.TopOfBookImplied..FixEncode
15634void emdi12::TopOfBookImplied_FixEncode(cstring& buf, emdi12::TopOfBookImplied& parent, char soh) {
15635 buf << "35=" << MsgType_Get(parent) << soh;
15636 buf << "34=" << parent.MsgSeqNum << soh;
15637 buf << "49=" << parent.SenderCompID << soh;
15638 buf << "1300=" << parent.MarketSegmentID << soh;
15639 {
15640 u32 length = MDIncGrp2_N(parent);
15641 if (length) {
15642 buf << "268=" << length << soh;
15643 }
15644 }
15645 ind_beg(TopOfBookImplied_MDIncGrp2_curs,elem,parent) {
15646 MDIncGrp2_FixEncode(buf,elem,soh);
15647 }ind_end;
15648}
15649
15650// --- emdi12...SizeCheck
15651inline static void emdi12::SizeCheck() {
15652}
15653
15654// --- emdi12...StaticCheck
15655void emdi12::StaticCheck() {
15656 // check that bitfield fits width
15657 algo_assert(sizeof(((emdi12::TradeConditionSet*)0)->value)*8 >= 13);
15658 algo_assert(_offset_of(emdi12::FieldId, value) + sizeof(((emdi12::FieldId*)0)->value) == sizeof(emdi12::FieldId));
15659 algo_assert(_offset_of(emdi12::TemplateHeaderMsgsCase, value) + sizeof(((emdi12::TemplateHeaderMsgsCase*)0)->value) == sizeof(emdi12::TemplateHeaderMsgsCase));
15660 algo_assert(_offset_of(emdi12::TemplateHeader_curs, msglen) + sizeof(((emdi12::TemplateHeader_curs*)0)->msglen) == sizeof(emdi12::TemplateHeader_curs));
15661}
15662
15663// --- emdi12.TemplateHeaderMsgs..FastEncode
15664void emdi12::TemplateHeaderMsgs_FastEncode(algo::ByteAry &buf, FastState &state, emdi12::TemplateHeader &header)
15665 {
15666 switch (header.id) {
15667 case 109:
15668 emdi12::Beacon_FastEncode(buf,state,(emdi12::Beacon&)header);
15669 break;
15670 case 124:
15671 emdi12::ComplexInstrumentUpdate_FastEncode(buf,state,(emdi12::ComplexInstrumentUpdate&)header);
15672 break;
15673 case 96:
15674 emdi12::CrossRequest_FastEncode(buf,state,(emdi12::CrossRequest&)header);
15675 break;
15676 case 94:
15677 emdi12::DepthIncremental_FastEncode(buf,state,(emdi12::DepthIncremental&)header);
15678 break;
15679 case 93:
15680 emdi12::DepthSnapshot_FastEncode(buf,state,(emdi12::DepthSnapshot&)header);
15681 break;
15682 case 64:
15683 emdi12::EMDPacketHeader_FastEncode(buf,state,(emdi12::EMDPacketHeader&)header);
15684 break;
15685 case 100:
15686 emdi12::FlexibleInstrumentUpdate_FastEncode(buf,state,(emdi12::FlexibleInstrumentUpdate&)header);
15687 break;
15688 case 98:
15689 emdi12::InstrumentStateChange_FastEncode(buf,state,(emdi12::InstrumentStateChange&)header);
15690 break;
15691 case 99:
15692 emdi12::MassInstrumentStateChange_FastEncode(buf,state,(emdi12::MassInstrumentStateChange&)header);
15693 break;
15694 case 97:
15695 emdi12::ProductStateChange_FastEncode(buf,state,(emdi12::ProductStateChange&)header);
15696 break;
15697 case 95:
15698 emdi12::QuoteRequest_FastEncode(buf,state,(emdi12::QuoteRequest&)header);
15699 break;
15700 case 120:
15701 emdi12::Reset_FastEncode(buf,state,(emdi12::Reset&)header);
15702 state.assigned = 0;
15703 state.present = 0;
15704 break;
15705 case 516:
15706 emdi12::ScaledSimpleInstrumentUpdate_FastEncode(buf,state,(emdi12::ScaledSimpleInstrumentUpdate&)header);
15707 break;
15708 case 512:
15709 emdi12::TopOfBookImplied_FastEncode(buf,state,(emdi12::TopOfBookImplied&)header);
15710 break;
15711 }
15712}
15713
15714// --- emdi12.TemplateHeaderMsgs..FastDecode
15715emdi12::TemplateHeader * emdi12::TemplateHeaderMsgs_FastDecode(algo::memptr &from, FastState &state,algo::ByteAry &buf) {
15716 int index = ary_N(buf);
15717 TemplateHeader *ret(NULL);
15718 u64 pmap;
15719 u32 tid(0);
15720 bool ok = lib_fast::DecodePmap(from,pmap);
15721 if (!ok) {
15722 state.error << "emdi12.TemplateHeader: bad pmap" << eol;
15723 }
15724 if (ok) {
15725 bool prs = lib_fast::GetPmapBit(pmap,0);
15726 if (prs) {
15727 ok = lib_fast::DecodeUnsigned(from,tid,false);
15728 if (!ok) {
15729 state.error << "emdi12.TemplateHeader.id: bad Unsigned" << eol;
15730 }
15731 } else if (tid_AssignedQ(state)) {
15732 tid = state.tid;
15733 } else {
15734 ok = false;
15735 state.error << "emdi12.TemplateHeader.id: copy operator: previous value unassigned" << eol;
15736 }
15737 tid_SetAssigned(state);
15738 state.tid = tid;
15739 }
15740 if (ok) {
15741 switch (tid) {
15742 case 109:
15743 {
15744 emdi12::Beacon &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::Beacon;
15745 ok = Beacon_FastDecode(from,pmap,state,msg);
15746 ret = ok ? &Castbase(*(emdi12::Beacon*)(buf.ary_elems+index)) : NULL;
15747 }
15748 break;
15749 case 124:
15750 {
15751 ary_RemoveAll(lib_fast::_db.varlen);
15752 emdi12::ComplexInstrumentUpdate &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::ComplexInstrumentUpdate;
15753 ok = ComplexInstrumentUpdate_FastDecode(from,pmap,state,msg);
15754 msg.length += ary_N(lib_fast::_db.varlen);
15755 ary_Addary(buf,ary_Getary(lib_fast::_db.varlen));
15756 ary_RemoveAll(lib_fast::_db.varlen);
15757 ret = ok ? &Castbase(*(emdi12::ComplexInstrumentUpdate*)(buf.ary_elems+index)) : NULL;
15758 }
15759 break;
15760 case 96:
15761 {
15762 emdi12::CrossRequest &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::CrossRequest;
15763 ok = CrossRequest_FastDecode(from,pmap,state,msg);
15764 ret = ok ? &Castbase(*(emdi12::CrossRequest*)(buf.ary_elems+index)) : NULL;
15765 }
15766 break;
15767 case 94:
15768 {
15769 ary_RemoveAll(lib_fast::_db.varlen);
15770 emdi12::DepthIncremental &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::DepthIncremental;
15771 ok = DepthIncremental_FastDecode(from,pmap,state,msg);
15772 msg.length += ary_N(lib_fast::_db.varlen);
15773 ary_Addary(buf,ary_Getary(lib_fast::_db.varlen));
15774 ary_RemoveAll(lib_fast::_db.varlen);
15775 ret = ok ? &Castbase(*(emdi12::DepthIncremental*)(buf.ary_elems+index)) : NULL;
15776 }
15777 break;
15778 case 93:
15779 {
15780 ary_RemoveAll(lib_fast::_db.varlen);
15781 emdi12::DepthSnapshot &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::DepthSnapshot;
15782 ok = DepthSnapshot_FastDecode(from,pmap,state,msg);
15783 msg.length += ary_N(lib_fast::_db.varlen);
15784 ary_Addary(buf,ary_Getary(lib_fast::_db.varlen));
15785 ary_RemoveAll(lib_fast::_db.varlen);
15786 ret = ok ? &Castbase(*(emdi12::DepthSnapshot*)(buf.ary_elems+index)) : NULL;
15787 }
15788 break;
15789 case 64:
15790 {
15791 emdi12::EMDPacketHeader &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::EMDPacketHeader;
15792 ok = EMDPacketHeader_FastDecode(from,pmap,state,msg);
15793 ret = ok ? &Castbase(*(emdi12::EMDPacketHeader*)(buf.ary_elems+index)) : NULL;
15794 }
15795 break;
15796 case 100:
15797 {
15798 emdi12::FlexibleInstrumentUpdate &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::FlexibleInstrumentUpdate;
15799 ok = FlexibleInstrumentUpdate_FastDecode(from,pmap,state,msg);
15800 ret = ok ? &Castbase(*(emdi12::FlexibleInstrumentUpdate*)(buf.ary_elems+index)) : NULL;
15801 }
15802 break;
15803 case 98:
15804 {
15805 emdi12::InstrumentStateChange &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::InstrumentStateChange;
15806 ok = InstrumentStateChange_FastDecode(from,pmap,state,msg);
15807 ret = ok ? &Castbase(*(emdi12::InstrumentStateChange*)(buf.ary_elems+index)) : NULL;
15808 }
15809 break;
15810 case 99:
15811 {
15812 ary_RemoveAll(lib_fast::_db.varlen);
15813 emdi12::MassInstrumentStateChange &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::MassInstrumentStateChange;
15814 ok = MassInstrumentStateChange_FastDecode(from,pmap,state,msg);
15815 msg.length += ary_N(lib_fast::_db.varlen);
15816 ary_Addary(buf,ary_Getary(lib_fast::_db.varlen));
15817 ary_RemoveAll(lib_fast::_db.varlen);
15818 ret = ok ? &Castbase(*(emdi12::MassInstrumentStateChange*)(buf.ary_elems+index)) : NULL;
15819 }
15820 break;
15821 case 97:
15822 {
15823 emdi12::ProductStateChange &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::ProductStateChange;
15824 ok = ProductStateChange_FastDecode(from,pmap,state,msg);
15825 ret = ok ? &Castbase(*(emdi12::ProductStateChange*)(buf.ary_elems+index)) : NULL;
15826 }
15827 break;
15828 case 95:
15829 {
15830 emdi12::QuoteRequest &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::QuoteRequest;
15831 ok = QuoteRequest_FastDecode(from,pmap,state,msg);
15832 ret = ok ? &Castbase(*(emdi12::QuoteRequest*)(buf.ary_elems+index)) : NULL;
15833 }
15834 break;
15835 case 120:
15836 {
15837 state.assigned = 0;
15838 state.present = 0;
15839 emdi12::Reset &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::Reset;
15840 ok = Reset_FastDecode(from,pmap,state,msg);
15841 ret = ok ? &Castbase(*(emdi12::Reset*)(buf.ary_elems+index)) : NULL;
15842 }
15843 break;
15844 case 516:
15845 {
15846 emdi12::ScaledSimpleInstrumentUpdate &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::ScaledSimpleInstrumentUpdate;
15847 ok = ScaledSimpleInstrumentUpdate_FastDecode(from,pmap,state,msg);
15848 ret = ok ? &Castbase(*(emdi12::ScaledSimpleInstrumentUpdate*)(buf.ary_elems+index)) : NULL;
15849 }
15850 break;
15851 case 512:
15852 {
15853 ary_RemoveAll(lib_fast::_db.varlen);
15854 emdi12::TopOfBookImplied &msg = *new(ary_AllocN(buf,sizeof msg).elems) emdi12::TopOfBookImplied;
15855 ok = TopOfBookImplied_FastDecode(from,pmap,state,msg);
15856 msg.length += ary_N(lib_fast::_db.varlen);
15857 ary_Addary(buf,ary_Getary(lib_fast::_db.varlen));
15858 ary_RemoveAll(lib_fast::_db.varlen);
15859 ret = ok ? &Castbase(*(emdi12::TopOfBookImplied*)(buf.ary_elems+index)) : NULL;
15860 }
15861 break;
15862 default:
15863 ok = false;
15864 state.error << "emdi12.TemplateHeader.id: unknown template " << tid << eol;
15865 }
15866 }
15867 return ret;
15868}
15869
15870// --- emdi12.TemplateHeaderMsgs..FixEncode
15871void emdi12::TemplateHeaderMsgs_FixEncode(cstring &buf, emdi12::TemplateHeader &header, char soh) {
15872 switch (header.id) {
15873 case 109:
15874 Beacon_FixEncode(buf,*emdi12::Beacon_Castdown(header),soh);
15875 break;
15876 case 124:
15877 ComplexInstrumentUpdate_FixEncode(buf,*emdi12::ComplexInstrumentUpdate_Castdown(header),soh);
15878 break;
15879 case 96:
15880 CrossRequest_FixEncode(buf,*emdi12::CrossRequest_Castdown(header),soh);
15881 break;
15882 case 94:
15883 DepthIncremental_FixEncode(buf,*emdi12::DepthIncremental_Castdown(header),soh);
15884 break;
15885 case 93:
15886 DepthSnapshot_FixEncode(buf,*emdi12::DepthSnapshot_Castdown(header),soh);
15887 break;
15888 case 64:
15889 EMDPacketHeader_FixEncode(buf,*emdi12::EMDPacketHeader_Castdown(header),soh);
15890 break;
15891 case 100:
15892 FlexibleInstrumentUpdate_FixEncode(buf,*emdi12::FlexibleInstrumentUpdate_Castdown(header),soh);
15893 break;
15894 case 98:
15895 InstrumentStateChange_FixEncode(buf,*emdi12::InstrumentStateChange_Castdown(header),soh);
15896 break;
15897 case 99:
15898 MassInstrumentStateChange_FixEncode(buf,*emdi12::MassInstrumentStateChange_Castdown(header),soh);
15899 break;
15900 case 97:
15901 ProductStateChange_FixEncode(buf,*emdi12::ProductStateChange_Castdown(header),soh);
15902 break;
15903 case 95:
15904 QuoteRequest_FixEncode(buf,*emdi12::QuoteRequest_Castdown(header),soh);
15905 break;
15906 case 120:
15907 Reset_FixEncode(buf,*emdi12::Reset_Castdown(header),soh);
15908 break;
15909 case 516:
15910 ScaledSimpleInstrumentUpdate_FixEncode(buf,*emdi12::ScaledSimpleInstrumentUpdate_Castdown(header),soh);
15911 break;
15912 case 512:
15913 TopOfBookImplied_FixEncode(buf,*emdi12::TopOfBookImplied_Castdown(header),soh);
15914 break;
15915 }
15916}
15917
15918// --- emdi12.TemplateHeaderMsgs..Print
15919// Print message to STR. If message is too short for MSG_LEN, print nothing.
15920// MSG.LENGTH must have already been validated against msg_len.
15921// This function will additionally validate that sizeof(Msg) <= msg_len
15922bool emdi12::TemplateHeaderMsgs_Print(algo::cstring &str, emdi12::TemplateHeader &msg, u32 msg_len) {
15923 switch(msg.id) {
15924 case 109: {
15925 if (sizeof(emdi12::Beacon) > msg_len) { return false; }
15926 Beacon_Print((emdi12::Beacon&)(msg), str);
15927 return true;
15928 }
15929 case 124: {
15930 if (sizeof(emdi12::ComplexInstrumentUpdate) > msg_len) { return false; }
15931 ComplexInstrumentUpdate_Print((emdi12::ComplexInstrumentUpdate&)(msg), str);
15932 return true;
15933 }
15934 case 96: {
15935 if (sizeof(emdi12::CrossRequest) > msg_len) { return false; }
15936 CrossRequest_Print((emdi12::CrossRequest&)(msg), str);
15937 return true;
15938 }
15939 case 94: {
15940 if (sizeof(emdi12::DepthIncremental) > msg_len) { return false; }
15941 DepthIncremental_Print((emdi12::DepthIncremental&)(msg), str);
15942 return true;
15943 }
15944 case 93: {
15945 if (sizeof(emdi12::DepthSnapshot) > msg_len) { return false; }
15946 DepthSnapshot_Print((emdi12::DepthSnapshot&)(msg), str);
15947 return true;
15948 }
15949 case 64: {
15950 if (sizeof(emdi12::EMDPacketHeader) > msg_len) { return false; }
15951 EMDPacketHeader_Print((emdi12::EMDPacketHeader&)(msg), str);
15952 return true;
15953 }
15954 case 100: {
15955 if (sizeof(emdi12::FlexibleInstrumentUpdate) > msg_len) { return false; }
15956 FlexibleInstrumentUpdate_Print((emdi12::FlexibleInstrumentUpdate&)(msg), str);
15957 return true;
15958 }
15959 case 98: {
15960 if (sizeof(emdi12::InstrumentStateChange) > msg_len) { return false; }
15961 InstrumentStateChange_Print((emdi12::InstrumentStateChange&)(msg), str);
15962 return true;
15963 }
15964 case 99: {
15965 if (sizeof(emdi12::MassInstrumentStateChange) > msg_len) { return false; }
15966 MassInstrumentStateChange_Print((emdi12::MassInstrumentStateChange&)(msg), str);
15967 return true;
15968 }
15969 case 97: {
15970 if (sizeof(emdi12::ProductStateChange) > msg_len) { return false; }
15971 ProductStateChange_Print((emdi12::ProductStateChange&)(msg), str);
15972 return true;
15973 }
15974 case 95: {
15975 if (sizeof(emdi12::QuoteRequest) > msg_len) { return false; }
15976 QuoteRequest_Print((emdi12::QuoteRequest&)(msg), str);
15977 return true;
15978 }
15979 case 120: {
15980 if (sizeof(emdi12::Reset) > msg_len) { return false; }
15981 Reset_Print((emdi12::Reset&)(msg), str);
15982 return true;
15983 }
15984 case 516: {
15985 if (sizeof(emdi12::ScaledSimpleInstrumentUpdate) > msg_len) { return false; }
15986 ScaledSimpleInstrumentUpdate_Print((emdi12::ScaledSimpleInstrumentUpdate&)(msg), str);
15987 return true;
15988 }
15989 case 512: {
15990 if (sizeof(emdi12::TopOfBookImplied) > msg_len) { return false; }
15991 TopOfBookImplied_Print((emdi12::TopOfBookImplied&)(msg), str);
15992 return true;
15993 }
15994 default:
15995
15996 return false;
15997 }
15998}
15999
16000// --- emdi12.TemplateHeaderMsgs..ReadStrptr
16001// Parse ascii representation of message into binary, appending new data to BUF.
16002emdi12::TemplateHeaderMsgsCase emdi12::TemplateHeaderMsgs_ReadStrptr(algo::strptr str, algo::ByteAry &buf) {
16003 bool ok = false;
16004 tempstr msgtype_str;
16005 algo::StringIter iter(str);
16006 cstring_ReadCmdarg(msgtype_str, iter, false); // read first word
16007 emdi12::TemplateHeaderMsgsCase msgtype;
16008 value_SetStrptrMaybe(msgtype, msgtype_str); // map string -> enum
16009 switch (value_GetEnum(msgtype)) { // what message is it?
16010 case emdi12_TemplateHeaderMsgsCase_emdi12_Beacon: {
16011 int len = sizeof(emdi12::Beacon);
16012 emdi12::Beacon *ctype = new(ary_AllocN(buf, len).elems) emdi12::Beacon; // default values
16013 ok = Beacon_ReadStrptrMaybe(*ctype, str); // now read attributes
16014 } break; // emdi12::Beacon case
16015
16016 case emdi12_TemplateHeaderMsgsCase_emdi12_ComplexInstrumentUpdate: {
16017 int len = sizeof(emdi12::ComplexInstrumentUpdate);
16018 emdi12::ComplexInstrumentUpdate *ctype = new(ary_AllocN(buf, len).elems) emdi12::ComplexInstrumentUpdate; // default values
16019 algo::ByteAry varlenbuf;
16020 algo::ByteAry *varlenbuf_save = algo_lib::_db.varlenbuf;
16021 algo_lib::_db.varlenbuf = &varlenbuf;
16022 ok = ComplexInstrumentUpdate_ReadStrptrMaybe(*ctype, str); // now read attributes
16023 len += ary_N(varlenbuf);
16024 ctype->length = u32(len);
16025 ary_Addary(buf, ary_Getary(varlenbuf));
16026 algo_lib::_db.varlenbuf = varlenbuf_save;
16027 } break; // emdi12::ComplexInstrumentUpdate case
16028
16029 case emdi12_TemplateHeaderMsgsCase_emdi12_CrossRequest: {
16030 int len = sizeof(emdi12::CrossRequest);
16031 emdi12::CrossRequest *ctype = new(ary_AllocN(buf, len).elems) emdi12::CrossRequest; // default values
16032 ok = CrossRequest_ReadStrptrMaybe(*ctype, str); // now read attributes
16033 } break; // emdi12::CrossRequest case
16034
16035 case emdi12_TemplateHeaderMsgsCase_emdi12_DepthIncremental: {
16036 int len = sizeof(emdi12::DepthIncremental);
16037 emdi12::DepthIncremental *ctype = new(ary_AllocN(buf, len).elems) emdi12::DepthIncremental; // default values
16038 algo::ByteAry varlenbuf;
16039 algo::ByteAry *varlenbuf_save = algo_lib::_db.varlenbuf;
16040 algo_lib::_db.varlenbuf = &varlenbuf;
16041 ok = DepthIncremental_ReadStrptrMaybe(*ctype, str); // now read attributes
16042 len += ary_N(varlenbuf);
16043 ctype->length = u32(len);
16044 ary_Addary(buf, ary_Getary(varlenbuf));
16045 algo_lib::_db.varlenbuf = varlenbuf_save;
16046 } break; // emdi12::DepthIncremental case
16047
16048 case emdi12_TemplateHeaderMsgsCase_emdi12_DepthSnapshot: {
16049 int len = sizeof(emdi12::DepthSnapshot);
16050 emdi12::DepthSnapshot *ctype = new(ary_AllocN(buf, len).elems) emdi12::DepthSnapshot; // default values
16051 algo::ByteAry varlenbuf;
16052 algo::ByteAry *varlenbuf_save = algo_lib::_db.varlenbuf;
16053 algo_lib::_db.varlenbuf = &varlenbuf;
16054 ok = DepthSnapshot_ReadStrptrMaybe(*ctype, str); // now read attributes
16055 len += ary_N(varlenbuf);
16056 ctype->length = u32(len);
16057 ary_Addary(buf, ary_Getary(varlenbuf));
16058 algo_lib::_db.varlenbuf = varlenbuf_save;
16059 } break; // emdi12::DepthSnapshot case
16060
16061 case emdi12_TemplateHeaderMsgsCase_emdi12_EMDPacketHeader: {
16062 int len = sizeof(emdi12::EMDPacketHeader);
16063 emdi12::EMDPacketHeader *ctype = new(ary_AllocN(buf, len).elems) emdi12::EMDPacketHeader; // default values
16064 ok = EMDPacketHeader_ReadStrptrMaybe(*ctype, str); // now read attributes
16065 } break; // emdi12::EMDPacketHeader case
16066
16067 case emdi12_TemplateHeaderMsgsCase_emdi12_FlexibleInstrumentUpdate: {
16068 int len = sizeof(emdi12::FlexibleInstrumentUpdate);
16069 emdi12::FlexibleInstrumentUpdate *ctype = new(ary_AllocN(buf, len).elems) emdi12::FlexibleInstrumentUpdate; // default values
16070 ok = FlexibleInstrumentUpdate_ReadStrptrMaybe(*ctype, str); // now read attributes
16071 } break; // emdi12::FlexibleInstrumentUpdate case
16072
16073 case emdi12_TemplateHeaderMsgsCase_emdi12_InstrumentStateChange: {
16074 int len = sizeof(emdi12::InstrumentStateChange);
16075 emdi12::InstrumentStateChange *ctype = new(ary_AllocN(buf, len).elems) emdi12::InstrumentStateChange; // default values
16076 ok = InstrumentStateChange_ReadStrptrMaybe(*ctype, str); // now read attributes
16077 } break; // emdi12::InstrumentStateChange case
16078
16079 case emdi12_TemplateHeaderMsgsCase_emdi12_MassInstrumentStateChange: {
16080 int len = sizeof(emdi12::MassInstrumentStateChange);
16081 emdi12::MassInstrumentStateChange *ctype = new(ary_AllocN(buf, len).elems) emdi12::MassInstrumentStateChange; // default values
16082 algo::ByteAry varlenbuf;
16083 algo::ByteAry *varlenbuf_save = algo_lib::_db.varlenbuf;
16084 algo_lib::_db.varlenbuf = &varlenbuf;
16085 ok = MassInstrumentStateChange_ReadStrptrMaybe(*ctype, str); // now read attributes
16086 len += ary_N(varlenbuf);
16087 ctype->length = u32(len);
16088 ary_Addary(buf, ary_Getary(varlenbuf));
16089 algo_lib::_db.varlenbuf = varlenbuf_save;
16090 } break; // emdi12::MassInstrumentStateChange case
16091
16092 case emdi12_TemplateHeaderMsgsCase_emdi12_ProductStateChange: {
16093 int len = sizeof(emdi12::ProductStateChange);
16094 emdi12::ProductStateChange *ctype = new(ary_AllocN(buf, len).elems) emdi12::ProductStateChange; // default values
16095 ok = ProductStateChange_ReadStrptrMaybe(*ctype, str); // now read attributes
16096 } break; // emdi12::ProductStateChange case
16097
16098 case emdi12_TemplateHeaderMsgsCase_emdi12_QuoteRequest: {
16099 int len = sizeof(emdi12::QuoteRequest);
16100 emdi12::QuoteRequest *ctype = new(ary_AllocN(buf, len).elems) emdi12::QuoteRequest; // default values
16101 ok = QuoteRequest_ReadStrptrMaybe(*ctype, str); // now read attributes
16102 } break; // emdi12::QuoteRequest case
16103
16104 case emdi12_TemplateHeaderMsgsCase_emdi12_Reset: {
16105 int len = sizeof(emdi12::Reset);
16106 emdi12::Reset *ctype = new(ary_AllocN(buf, len).elems) emdi12::Reset; // default values
16107 ok = Reset_ReadStrptrMaybe(*ctype, str); // now read attributes
16108 } break; // emdi12::Reset case
16109
16110 case emdi12_TemplateHeaderMsgsCase_emdi12_ScaledSimpleInstrumentUpdate: {
16111 int len = sizeof(emdi12::ScaledSimpleInstrumentUpdate);
16112 emdi12::ScaledSimpleInstrumentUpdate *ctype = new(ary_AllocN(buf, len).elems) emdi12::ScaledSimpleInstrumentUpdate; // default values
16113 ok = ScaledSimpleInstrumentUpdate_ReadStrptrMaybe(*ctype, str); // now read attributes
16114 } break; // emdi12::ScaledSimpleInstrumentUpdate case
16115
16116 case emdi12_TemplateHeaderMsgsCase_emdi12_TopOfBookImplied: {
16117 int len = sizeof(emdi12::TopOfBookImplied);
16118 emdi12::TopOfBookImplied *ctype = new(ary_AllocN(buf, len).elems) emdi12::TopOfBookImplied; // default values
16119 algo::ByteAry varlenbuf;
16120 algo::ByteAry *varlenbuf_save = algo_lib::_db.varlenbuf;
16121 algo_lib::_db.varlenbuf = &varlenbuf;
16122 ok = TopOfBookImplied_ReadStrptrMaybe(*ctype, str); // now read attributes
16123 len += ary_N(varlenbuf);
16124 ctype->length = u32(len);
16125 ary_Addary(buf, ary_Getary(varlenbuf));
16126 algo_lib::_db.varlenbuf = varlenbuf_save;
16127 } break; // emdi12::TopOfBookImplied case
16128
16129 default: break;
16130 }
16131 return ok ? msgtype : emdi12::TemplateHeaderMsgsCase();
16132}
16133
16134// --- emdi12.TemplateHeaderMsgs..ReadStrptrMaybe
16135// Parse ascii representation of message into binary, appending new data to BUF.
16136bool emdi12::TemplateHeaderMsgs_ReadStrptrMaybe(algo::strptr str, algo::ByteAry &buf) {
16137 emdi12::TemplateHeaderMsgsCase msgtype = TemplateHeaderMsgs_ReadStrptr(str,buf);
16138 return !(msgtype == emdi12::TemplateHeaderMsgsCase());
16139}